ArrayList wird nicht befüllt.

butterfly84

Mitglied
Hallo liebes Forum,

ich möchte mehrere ArrayLists erzeugen und mit diesen arbeiten. Dies klappt mit dem einen sehr gut (segmente) aber mit dem zweiten, den ich genau so erstelle, klappt das Ganze nicht (rechtecke). Es ist immer nur ein "rechteck" in der Liste. Ich bin für jede Hilfe sehr dankbar.

Hier der Code:

Java:
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.ArrayList;

import java.util.StringTokenizer;

public class Ueberschneidung{

	
	static int anzrechteck = 0;
	static Punkt punkt = null;
	static Xfigpolyline pl = new Xfigpolyline();
	static Segment segment = null;
	public static int anz;
	static int anzZeile = 0;
	static Rechteck rechteck = null;

	public static void main(String[] args) throws IOException {
		// lese Datei
		BufferedReader in = new BufferedReader(new FileReader(
				".."));
		// lese Zeile
		String zeile = in.readLine();
		// solange Zeilen vorhanden sind
		while (zeile != null) {

			// überprüfe ob Polyline
			if (zeile.startsWith("2")) {
				zeile = in.readLine();
				anzZeile++;

				StringTokenizer st = new StringTokenizer(zeile);

				anz = st.countTokens() / 2;

				for (int i = 0; st.hasMoreTokens(); i++) {
					// x- und y-Koordinate zuweisen
					punkt = new Punkt(Integer.parseInt(st.nextToken()),
							Integer.parseInt(st.nextToken()));

					System.out.println("Punkt: " + punkt);

					pl.punktDazu(punkt);

				}
				ArrayList<Rechteck> rechtecke = new ArrayList<Rechteck>();
				ArrayList<Segment> segmente = new ArrayList<Segment>();
				for (int i = 0; i < pl.polyline.size()-1; i++) {
					segment = new Segment(pl.polyline.get(i),
							pl.polyline.get(i + 1));

					System.out.println(segment + "Segment" + i);
				
					if (segment.istSenkrecht()) {
						System.out.println("Segment ist senkrecht");
					}
					
					
					segmente.add(segment);

				
			
					if ((segmente.size() == 4)
							&& (segmente.get(0).p1.y == segmente.get(3).p2.y)
							&& (segmente.get(0).p1.x == segmente.get(3).p2.x)) {
						rechteck = new Rechteck(segmente.get(0),
								segmente.get(1), segmente.get(2),
								segmente.get(3));
						anzrechteck++;
							
						}
						
					
				}
					
				
				rechtecke.add(rechteck);
				
				
			
					//Bbox
					
					if ((segmente.size() == 3)
							&& (segmente.get(0).p1.y == segmente.get(2).p2.y)
							&& (segmente.get(0).p1.x == segmente.get(2).p2.x)) {
						Bbox b1 = new Bbox(segmente.get(0).p2, segmente.get(2).p1);
						b1.zuRechteck();
						System.out.println(b1.zuRechteck());
					}
					

			
				if ((segmente.size() == 4)
						&& !((segmente.get(0).p1.y == segmente.get(3).p2.y) && (segmente
								.get(0).p1.x == segmente.get(3).p2.x))) {
					for (int k = 0; k < rechtecke.size(); k++) {

						System.out
								.println(segmente.get(k).schneidetRechteck(
										rechtecke.get(k)));

					}
				}
				
				else if (segmente.size() < 4 | segmente.size() > 4) {
					for (int k = 0; k < rechtecke.size(); k++) {

						System.out.println(segmente.get(0).schneidetRechteck(
								rechtecke.get(0)));

					}
				} else {
					System.out.println("?");

				}

				pl.polyline.clear();
			
			}
			
			zeile = in.readLine();
			

		}
		System.out.println();
		
		
	}

}
 
Zeile 79
Code:
rechtecke.add(rechteck)
ist ja auch außerhalb der Schleife. Vermutlich gehört es eher IN die Schleife.
 
Du fügst auch nur ein Rechteck in die Liste ein.


Du hast die Forschleife in zeile 76 etwas zu früh geschlossen und damit ist deine rechtecke.add(rechteck) nicht in der schleife.

einfach Klammer aus zeile 76 in zeile 80 verschieben und es sollte funktionieren
 
Vielen Dank für die schnellen antworten, aber wenn es in der Schleife steht, dann fängt die Liste so an null, null, null und dann kommt erst ein Rechteck. Und insgesamt sind nur vier von zehn Rechtecken enthalten ???:L???:L
 
Ja... dann musst du vermutlich das nicht einfach so in die for-Schleife setzen, sondern in die Abfrage in der Zeile 65.
Außerdem erstellst du in Zeile 48 (die ja innerhalb der while-Schleife ist) immer wieder eine neue Arraylist. Die zuvor gespeicherten Werte werden natürlich dadurch gelöscht.
Überlege dir einfach was du da überhaupt machst und was du in Wirklichkeit machen willst. Dann packst du noch Debugausgaben rein und prüfst es selber nach.
 

Zurück
Oben