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.
X Werte in ArrayList von Point Objekte alle gleich ?
du könntest die Liste in ein Set übernehmen und dann kucken, ob die Größen der Liste und des Sets sich unterscheiden. dazu solltest du in der Klasse Stützstelle (btw. sollte man imho Umlaute in Klassennamen verhindern) equals und hashcode überschreiben. Eine andere Möglichkeit wäre das einfach selbst zu überprüfen. Dazu würde ich die Liste erst mal Sortierten. Dafür musst du in Stützstelle Comparable implementieren und die compareTo überschreiben. Dann durchiterieren und den aktuellen Index immer mit dem Folgeindex vergleichen.
Die Frage, die ich mir noch stelle: willst du überhaupt Dubletten zulassen?? Wenn nein, würde ich sofort ein Set nehmen.
x Werte dürfen nicht doppelt vorkommen, y Werte wohl.
Bis jetzt habe ich nach mühsame Arbeit (weil ich es nicht verstehe) Comparable implementiert in der Stuetzstelle Klasse, und deswegen kann ich die x Werte wohl schonmal nach Größe sortieren
hast du die compareTo-Methode überschrieben? Dann kannst du das Ding ja mal Sortieren. Wenn deine Grundreihenfolge wichtig ist, würde ich mir diese merken oder wenn die Liste nicht so groß ist vorher kopieren.
Dann einfach sowas in der Art (keine Garantie - einfach so in Browser getippt):
Java:
for (int i = 0; i < list.size()-1; i++) {
Stuetzstelle current = list.get(i);
Stuetzstelle next = list.get(i+1);
if (current.getX() == next.getX())
throw new IllegalArgumentException("Identische X-Werte gefunden");
if (current.getY() == next.getY())
System.out.println("Warnung: identische Y-Werte gefunden");
}
Voraussetzung sind natürlich die getter in der Klasse Stuetzstelle
eine Stützstelle ist (TO korrigier mich bitte wenn ich falsch liege) das y zu einem eindeutigen x
( ich meine y = f(x) )
x muss eindeutig sein -> HashMap<Double, Double> (Double an erster Stelle ist aber gefährlich ;-) )
Du kannst einfach einfügen und der letzte Wert bleibt gespeichert.
Exceptions kannst du manuell auslösen
Java:
private static HashMap<Integer, Double> s = new HashMap<Integer, Double>();
public static void main(String[] args) throws Exception {
s.put(1, 1.0);
s.put(2, 3.0);
s.put(2, 2.0); // jetzt ist bei 2 der Wert 2.0 gespeichert, 3.0 ist weg
// oder du machst das
if (s.containsKey(2))
throw new Exception();
}
warum? nur weil nicht jeder Double dezimal 100% darstellbar ist, hat er doch trotzdem einen eindeutigen HashCode. oder stehe ich jetzt irgendwo auf dem Schlauch
map wuerde ich hier nicht nehmen, durch das put überschreibst du einen bestehenden Eintrag und hast kein direktes Feedback.
Aber der Ansatz dass schon beim einfügen zu checken halte ich für richtig.
Ich würde in der Klasse im Hintergrund ein Set nehmen, dies erlaubt ja per se keine Duplikate. Das add beim Set gibt als Rückgabewert dann true (wurde reingenommen) bzw false (gabs schon) zurück. Darauf kannst du reagieren und deine Exception werfen.
Das für die x Werte
EDIT: und bitte übernehme nicht das Übel von [c]throw Exception[/c] - man sollte immer eine konkrete Exception nehmen und nicht Exception als Typ
aus dem Namen MgRulesCompliance geht jetzt nicht unbedingt der Nutzen der Klasse hervor aber warum schreibst du dort nicht einfach eine add-Methode und überprüfst das da? Ansonsten habe ich dir oben ein kleines Beispiel geschrieben, wie es vllt mit sort klappen könnte. Ahja IllegalArgumentException ist eine unchecked-Exception und muss nicht geworfen werden.
MgRulesCompliance ist eine von 4 Klassen die alle eine andere ArrayList mit Stützstellen übergeben bekommen und die alle 4 das Interface IMessgroessen implementieren.