P5: IndexOutOfBoundsException

mo2l
Neuling
Neuling
Beiträge: 4
Registriert: 4. Mai 2013 16:42

P5: IndexOutOfBoundsException

Beitrag von mo2l »

Hi,

ich hab folgendes Problem und steh momentan tierisch auf dem Schlauch. Wenn ich in der Visualisierung in einem Dreieck immer mehr Punkte hinzufüge komme ich an einen Punkt, an dem ich eine IndexOutOfBoundsException geschmissen bekomme.

Code: Alles auswählen

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
Hab erstmal vermutet das meine getTriangle(Point p) die Ursache dafür ist, also hab ich in meiner insertPoint(Point p) diese duch super.getTriangle() ersetzt. Dies hat jedoch den gleichen Effekt und wenn ich mir den Error Tray anschaue kommt an entsprechender Stelle:

Code: Alles auswählen

(...)at data.Triangle.containsPoint(Triangle.java:54)
	at data.Traversing.getTriangle(Traversing.java:170)
	at data.Triangulation.insertPoint(Triangulation.java:365)(...)
Da der Fehler in Triangle.containsPoint zu liegen scheint und ich diese nie bearbeiten sollte bzw. habe steh ich echt auf dem Schlauch.

Die Anzahl der vorher erzeugten Dreiecke bis zum Auftreten der Exception ist, soweit mein Gefühl mir das sagt, nicht konstant. Die Exception tritt aber erst nach einer "großen" Menge von eingefügten Punkten auf. Immer in einem von Punkten dicht besetzten Gebiet.

Bild

Im Bild wäre es im Unteren Bereich nach dem ich versucht habe folgenden Punkt einzufügen:

Code: Alles auswählen

clicked: 396|464
INSERT Point: 9.212189616252822|10.900677200902935
Auch ist das Auftreten der Exception nicht Punktabhängig. Sprich wenn ich die Visualisierung erneut starte und an entsprechender Stelle einen Punkt setzte klappt dies ohne Probleme.

Für Anregungen Ideen oder sonstiges wäre ich sehr dankbar.

Gruß

Marcel

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: P5: IndexOutOfBoundsException

Beitrag von Bug »

Wenn dieser Fehler tatsächlich nur nach einer sehr großen Anzahl an eingefügten Punkten in einem kleinen Gebiet auftritt, dann ist das in Ordnung.

Ich vermute es liegt an Folgendem: Während die Datenstrukturen intern mit Gleitkommazahlen arbeiten, hat die Visualisierung ja ein deutlich gröberes Koordinatensystem. Wenn jetzt zwei Punkte sehr dicht beieinander liegen, dann könnten beim Einfügen Kanten entstehen, bei denen Start- und Endpunkt gleich sind. Wenn sich nun containsPoint die Liste der Eckpunkte (getPoint) holt, dann gibt diese eben nur zwei statt drei Punkte zurück (weil ja einer doppelt ist) und daher kommt es zu dieser IndexOutOfBoundsException, da die Methode ja drei Einträge erwartet.
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Antworten

Zurück zu „Archiv“