Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Subject getMinimalx (Set<Subject> N)
{
Subject Gesucht ;
Iterator it = N.iterator () ;
while (it.hasNext()){
if ( Gesucht.getX() > it.next().getX() ) //Das hier kann ich nicht verstehen ...dieses (it.next() ist mir n bisschen komisch und ich kann damit nicht umgehen
{Gesucht = it.next() ; }
}
return Gesucht ;
}
it.next() liefert das nächste Element in der Liste, was könnte es einfacheres geben?
natürlich solltest du es nicht zweimal aufrufen, denn jeder Aufruf liefert ein anderes/ das nächste Objekt,
also nur einmal pro Schleifendurchlauf, und in einer Variablen speichern,
der getX() Aufruf klappt doch soweit oder?
Problem ist dann noch, dass Gesucht anfangs null ist,
Gesucht.getX() führt zu einer NullPointerException,
vergleiche das mit dem echten Leben, um die größte von 5 Tomaten auszuwählen vergleichst du je zwei, aber was machst du am Anfang?
Den Algorithmus, den Du da nachprogrammierst, gibt es bereits als Collections.min
Java:
public Subject getMinimalX(Collection<? extends Subject> subjekte)
{
return Collections.min(subjekte, new Comparator<Subject>()
{
public int compare(Subject a, Subject b)
{
int x = a.getX();
int y = b.getX();
return (x < y) ? -1 : (x > y) ? +1 : 0;
}
});
}
danke SchonWiederFred , ich bin Java Anfänger , und ich hab nur seit kurzem mit Collections und Sets zu tun , kannste mal n bisschen erklären was deine Idee da ist ? , die ersten 2 Zeilen vielleicht ? .... also der Methode wird ein Collection übergeben ?(bei mir muss der Methode ein Set übergeben werden ), und was ist dieses "Retrun" in der zweiten Zeile ...?
Damit returned man das Ergebnis der Methode Collections (Java Platform SE 6)). Dieser übergibt man die Collection, aus der man das Minimum ermitteln möchte und einen Comparator. Dieser Comparator, weiß, wie man zwei Objekte vergleicht.
Was jetzt hier noch gemacht wird, ist das er mit
Java:
new Comparator<Subject>() {...}
direkt dort wo er die Klasse braucht sie Implementiert.
Man könnte auch selber eine Klasse schreiben.
Java:
public class SubjectComparator implements Comparator<Subject> {...}
Dieses interface erwartet, dass man die Methode:
Java:
public int compare(T a, T b);
überschreibt. Dein T ist in diesem Falle halt Subject. Die Methode vergleicht also zwei Object miteinander. Wenn das erste kleiner ist muss der Rückgabewert < 0 sein, ist das erste größer muss der Rückgabewert > 0 sein, sind beide gleich muss 0 zurückgegeben werden. Genau dies wird auch gemacht, nur dass er dies in eine Zeile gepackt hat mit einem erweiterten If-Konstrukt.
Jetzt wo der Comparator weiß, wie er zwei Subject vergleicht, macht er dies für alle Werte, merkt sich das Minimum und gibt dir am Schluss dieses zurück.
Insofern erspart dir diese Methode dich um das vergleichen aller Subject zu kümmern und auch das speichern des Minimums entfällt. Du musst halt nur implementieren, wie man zwei Subject miteinander vergleichen kann.