Ich habe folgendes Problem: Ich möchte eine unbestimmte Anzahl an Punkten (jeweils mit x, y & z - Wert) einlesen (zunächst über die Tastatur, später eventuell mittels eines .txt-Files) und dann von einem bestimmten Punkt die Koordinaten wieder ausgeben. Dazu habe ich die Klasse Punkt mit genannten Variablen erstellt. In der Main Methode habe ich eine ArrayList erstellt und füge in einer while-Schleife in jedem Durchlauf einen Punkt hinzu. Laut Debugger funktioniert das Hinzufügen auch. Wenn ich allerdings einen beliebigen Punkt auslesen will, dann wird immer nur der zuletzt eingegebene ausgegeben.
Liegt es daran, dass ich in der While Schleife immer wieder den Punkt p1 überschreibe? Wenn ja, gibt es eine elegantere Methode eine unbestimmte Anzahl an Punkten einzulesen, mit denen ich dann auch weiterrechnen kann?
Hier der Source Code:
Java:
publicclassHauptmethode{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubScanner sc =newScanner(System.in);System.out.println("Anzahl der Punkte definieren!");int anzahl = sc.nextInt();int i =0;ArrayListPunktliste=newArrayList();Punkt p1 =newPunkt();while( i < anzahl){System.out.println("Welche X Koordinate?");
p1.setX(sc.nextDouble());System.out.println("Welche Y Koordinate?");
p1.setY(sc.nextDouble());System.out.println("Welche Z Koordinate?");
p1.setZ(sc.nextDouble());Punktliste.add(i, p1);
i++;}System.out.println("Von welchem Punkt die Koordinaten anzeigen?");int nr = sc.nextInt();System.out.println("Punkt: "+ nr +" X "+Punktliste.get(nr).getX());}
Ich bin Anfänger, also bin ich dankbar für jeden "einfachen Lösungsvorschlag"
Ich arbeite übrigens mit Eclipse Luna.
du kannst die die anzahl der einträge über punkteliste.size(); ausgeben lassen, und hinzufügen könntest du es auch so machen das du variablen deklarierst und immer ein neues object hinzufügst (int x, y, z einlesen) und punkteliste.add( new Punkt( x, y, z)); anweist.
Punkt p1 =newPunkt();while( i < anzahl){System.out.println("Welche X Koordinate?");
p1.setX(sc.nextDouble());System.out.println("Welche Y Koordinate?");
p1.setY(sc.nextDouble());System.out.println("Welche Z Koordinate?");
p1.setZ(sc.nextDouble());Punktliste.add(i, p1);
i++;}
Du erzeugst ein(!!!) Objekt der Klasse Punkt.
In der "while"-Schleife setzt du von diesem einem(!!!) Objekt die X, Y und Z Koordinate und fügst dieses Objekt zur Liste hinzu.
--> Du hast ein Punkt Objekt erzeugt und fügst diese X-mal in die Liste hinzu! Und jedesmal änderst du von diesem Objekt die X, Y, Z Koordinate.
Java:
while( i < anzahl){Punkt p1 =newPunkt();System.out.println("Welche X Koordinate?");
p1.setX(sc.nextDouble());System.out.println("Welche Y Koordinate?");
p1.setY(sc.nextDouble());System.out.println("Welche Z Koordinate?");
p1.setZ(sc.nextDouble());Punktliste.add(i, p1);
i++;}
Habe es jetzt mit folgendem Code zum laufen gebracht:
Java:
publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);System.out.println("Wie viele Punkte einlesen?");ArrayListPunktliste=newArrayList();int anzahl= sc.nextInt();int i =0;while( i < anzahl){System.out.println("Welche X Koordinate?");double x=sc.nextDouble();System.out.println("Welche Y Koordinate?");double y=sc.nextDouble();System.out.println("Welche Z Koordinate?");double z=sc.nextDouble();Punktliste.add(newPunkt(x,y,z));
i++;}System.out.println("Die Koordinate von welchen Punkt ausgeben?");int nr=sc.nextInt();System.out.println("Punktnummer: X="+Punktliste.get(nr).getX()+" Y="+Punktliste.get(nr).getY()+" Z="+Punktliste.get(nr).getZ());}
Mein Problem bestand darin, dass in der ArrayList anscheinend Platzhalter für p1 eingefügt wurden und jedes mal wenn ich für p1 eine neue Koordinate angegeben habe, diese auf jedem Platzhalter angeglichen wurde.
Du hast einfach nur die ganze Zeit mit einem Objekt gearbeitet.
Jede Referenz in deiner ArrayList hat auf ein und das selbe Objekt gezeigt, dadurch hast du in jedem schleifen Durchlauf einfach nur die Werte in dem Objekt geändert.
publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);System.out.println("Wie viele Punkte einlesen?");ArrayList<Punkt>Punktliste=newArrayList<>();int anzahl= sc.nextInt();int i =0;double x, y, z;while( i < anzahl){System.out.println("Welche X Koordinate?");
x=sc.nextDouble();System.out.println("Welche Y Koordinate?");
y=sc.nextDouble();System.out.println("Welche Z Koordinate?");
z=sc.nextDouble();Punkt p =newPunkt( x, y, z);Punktliste.add( p);// Punktliste.add(new Punkt(x,y,z)); //alternativ
i++;}System.out.println("Die Koordinate von welchen Punkt ausgeben?");int nr=sc.nextInt();System.out.println("Punktnummer: X="+Punktliste.get(nr).getX()+" Y="+Punktliste.get(nr).getY()+" Z="+Punktliste.get(nr).getZ());}