Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sorting:problemstellung:start [06.02.2023 09:40] – [Gemeinsamkeiten] Frank Schiebel | faecher:informatik:oberstufe:algorithmen:sorting:problemstellung:start [08.02.2023 16:06] (aktuell) – [Sortiert?] Frank Schiebel | ||
---|---|---|---|
Zeile 38: | Zeile 38: | ||
==== Gemeinsamkeiten ==== | ==== Gemeinsamkeiten ==== | ||
- | In allen Beispielen wurde ein Array mit der (noch zu implementierenden) Methode '' | + | In allen Beispielen wurde ein Array mit der (noch zu implementierenden) Methode '' |
+ | |||
+ | ===== Callbacks und Interfaces ===== | ||
+ | |||
+ | Ein Callback ist eine Referenz auf ausführbaren Code - bei den Sortierbeispielen oben geschieht stets folgendes: | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | In Java werden solche Callbacks als **Interfaces** implementiert. Datentypen, die man sortieren kann, müssen in Java das **Comparable-Interface** implementieren. Zahlreiche Datentypen machen das "von sich aus", z.B. Integer, Double, String, Date, und File. | ||
+ | |||
+ | ==== Eigene sortierbare Objekte ==== | ||
+ | |||
+ | Wenn man eigene Objekte implementiert, | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | public class Time implements Comparable< | ||
+ | { | ||
+ | private int hour, minute; | ||
+ | |||
+ | public Time(int h, int m) | ||
+ | { | ||
+ | hour = h; | ||
+ | minute = m; | ||
+ | } | ||
+ | |||
+ | public int compareTo(Time that) | ||
+ | { | ||
+ | if (this.hour < that.hour ) return -1; | ||
+ | if (this.hour > that.hour ) return +1; | ||
+ | if (this.minute > that.minute ) return +1; | ||
+ | if (this.minute < that.minute ) return -1; | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Der Vergleich zweier Objekte des Typs '' | ||
+ | |||
+ | <code java> | ||
+ | Time t1 = new Time(15, | ||
+ | Time t2 = new Time(15, | ||
+ | |||
+ | if (t1.compareTo(t2) < 0 ) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | if (t1.compareTo(t2) > 0 ) | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | if (t1.compareTo(t2) == 0 ) | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | {{ : | ||
+ | | ||
+ | | ||
+ | * Kann man das Spiel Schere-Stein-Papier mit einer Klasse '' | ||
+ | |||
+ | ===== Hilfsfunktionen ===== | ||
+ | |||
+ | Da der Vergleich mittels '' | ||
+ | |||
+ | ==== Kleiner... ==== | ||
+ | |||
+ | Die Hilfsfunktion '' | ||
+ | |||
+ | <code java> | ||
+ | private boolean less(Comparable v, Comparable w) | ||
+ | { | ||
+ | return v.compareTo(w) < 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Platztausch ==== | ||
+ | |||
+ | Die Hilfsfunktion '' | ||
+ | <code java> | ||
+ | private void exch(Comparable[] a, int i, int j) | ||
+ | { | ||
+ | Comparable swap = a[i]; | ||
+ | a[i] = a[j]; | ||
+ | a[j] = swap; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Sortiert? ==== | ||
+ | |||
+ | Die letzte Hilfsfunktion gibt '' | ||
+ | |||
+ | <code java> | ||
+ | private boolean isSorted(Comparable[] a) | ||
+ | { | ||
+ | for (int i = 1; i < a.length; i++) { | ||
+ | if (less(a[i], a[i-1])) return false; | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Material ==== | ||
+ | |||
+ | {{simplefilelist>: | ||