Løsningsforslag - oppgaver i Avsnitt 1.2.1


Oppgave 1

  public static int min(int[] a, int fra, int til)
  {
    if (fra < 0 || til > a.length || fra >= til)
      throw new IllegalArgumentException("Illegalt intervall!");

    int m = fra;             // indeks til minste verdi i a[fra:til>
    int minverdi = a[fra];   // minste verdi i a[fra:til>

    for (int i = fra + 1; i < til; i++) if (a[i] < minverdi)
    {
      m = i;               // indeks til minste verdi oppdateres
      minverdi = a[m];     // minste verdi oppdateres
    }

    return m;  // posisjonen til minste verdi i a[fra:til>
  }

  public static int min(int[] a)  // bruker hele tabellen
  {
    return min(a,0,a.length);     // kaller metoden over
  }

Oppgave 2

  public static int maks(int[] a, int fra, int til)
  {
    int sist = til - 1;            // siste posisjon i tabellen
    int m = fra;                   // indeks til største verdi
    int maksverdi = a[fra];        // største verdi
    int temp = a[sist];            // tar vare på siste verdi
    a[sist] = 0x7fffffff;          // legger tallet 2147483647 sist

    for (int i = fra + 1; ; i++)   // i starter med 1
      if (a[i] >= maksverdi)       // denne blir sann til slutt
      {
        if (i == sist)             // sjekker om vi er ferdige
        {
          a[sist] = temp;          // legger siste verdi tilbake
          return temp >= maksverdi ? sist : m;   // er siste størst?
        }
        else
        {
          maksverdi = a[i];        // maksverdi oppdateres
          m = i;                   // m oppdateres
        }
      }
  } // maks  

Oppgave 3

Kopitabellen får lengde tofrom også hvis to er for stor, men med ekstra «null»-verdier. Se flg. eksempel:

  int[] a = {1,2,3,4,5};

  int[] b = Arrays.copyOfRange(a, 0, 10);
  System.out.println(Arrays.toString(b));

  // Utskrift: [1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

Oppgave 4

Metodene binarySearch, compare, compareUnsigned, copyOfRange, equals, fill, mismatch, parallelPrefix, parallelSort og sort.

På noen nye metoder har man innført parameternavnene startInclusive og endExclusive.

Oppgave 5

Den nye typen for-løkke kalles en for-alle-løkke og den henter ett og ett element fra en datastruktur som kompilatoren oppfatter som Iterable (itererbar). Inntil videre er det kun tabeller som er Iterable for oss. Den lages slik:

  for (Datatype x : a) <et eller annet gjøres med x>;

Bokstaven a står for navnet på en tabell og Datatype er tabellens datatype, f.eks. int, double, Integer, String. Programsetningen kan leses slik: for alle x i a gjør . . . . Variabelnavnet x er valgfritt. Du kan velge et hvilket som helst navn så sant det ikke kommer i konflikt med andre navn.

I flg. eksempel skrives innholdet av en String-tabell ut til konsollet:

  String[] s = {"Ola","Per","Kari","Ali","Jasmin"};
  for (String navn : s) System.out.print(navn + " ");

  // Utskrift: Ola Per Kari Ali Jasmin