Løsningsforslag - oppgaver i Avsnitt 1.4.6


Oppgave 2

  public static void main(String... args)
  {
    Student[] s = new Student[9];                             // en studenttabell

    s[0] = new Student("Kari","Svendsen",Studium.Data);      // Kari Svendsen
    s[1] = new Student("Boris","Zukanovic",Studium.IT);      // Boris Zukanovic
    s[2] = new Student("Ali","Kahn",Studium.Anvendt);        // Ali Kahn
    s[3] = new Student("Azra","Zukanovic",Studium.IT);       // Azra Zukanovic
    s[4] = new Student("Kari","Pettersen",Studium.Data);     // Kari Pettersen
    s[5] = new Student("Anders","Åsen",Studium.Elektro);     // Anders Åsen
    s[6] = new Student("Kari","Østsiden",Studium.Elektro);   // Kari Østsiden
    s[7] = new Student("Per","Jensen",Studium.Enkeltemne);   // Per Jensen
    s[8] = new Student("Kari","Lie",Studium.Enkeltemne);     // Kari Lie

    Tabell.innsettingssortering(s, (s1,s2) ->
      {
        int k = s1.studium().compareTo(s2.studium());
        return k != 0 ? k : s1.compareTo(s2);
      }
    );

    for (Student t : s) System.out.println(t);
  }

Oppgave 3

  Tabell.innsettingssortering(s,
    (s1,s2) ->
    {
      int k = s1.studium().compareTo(s2.studium());
      if (k != 0) return k;
      k = s1.fornavn().compareTo(s2.fornavn());
      if (k != 0) return k;
      return s1.etternavn().compareTo(s2.etternavn());
    }
  );

Oppgave 4

  public static <T> int maks(T[] a, Komparator<? super T> c)
  {
    return maks(a, 0, a.length, c);  // kaller metoden nedenfor
  }

  public static <T> int maks(T[] a, int fra, int til, Komparator<? super T> c)
  {
    fratilKontroll(a.length,fra,til);

    if (fra == til) throw new NoSuchElementException
     ("fra(" + fra + ") = til(" + til + ") - tomt tabellintervall!");

    int m = fra;                // indeks til største verdi
    T maksverdi = a[fra];       // største verdi

    for (int i = fra + 1; i < til; i++)   // går gjennom intervallet
    {
      if (c.compare(a[i],maksverdi) > 0)  // bruker komparatoren
      {
        maksverdi = a[i];     // største verdi oppdateres
        m = i;                // indeks til største verdi oppdateres
      }
    }
    return m;                 // posisjonen til største verdi

  }  // maks
  

Oppgave 5

  String[] s = {"21","18","8","13","20","6","16","25","3","10"};

  Tabell.innsettingssortering(s, (x,y) ->
    {
      int k = x.length() - y.length();
      return k != 0 ? k : x.compareTo(y);
    }
  );

  System.out.println(Arrays.toString(s));
  // Utskrift: [3, 6, 8, 10, 13, 16, 18, 20, 21, 25]

Oppgave 6

  Komparator<Integer> c = (x,y) ->
  {
    if (((x - y) & 1) == 0)  // x og y oddetall eller x og y partall
    {
      if (x < y) return -1;
      else if (x > y) return 1;
      else return 0;
    }
    else if ((x & 1) == 0) return 1;   // x partall og y oddetall
    else return -1;                    // x oddetall og y partall
  };

Oppgave 7

  Komparator<Student> c = (s1,s2) ->
  {
    int cmp = s1.studium().name().compareTo(s2.studium().name());
    return cmp != 0 ? cmp : s1.compareTo(s2);
  };

Oppgave 8

  Arrays.sort(s, (s1,s2) -> s1.klasse().compareTo(s2.klasse()));