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.
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:
public class Hauptmethode {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("Anzahl der Punkte definieren!");
int anzahl = sc.nextInt();
int i = 0;
ArrayList
Punktliste = new ArrayList
();
Punkt p1 = new Punkt();
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 = new Punkt();
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 = new Punkt();
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:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Wie viele Punkte einlesen?");
ArrayList
Punktliste = new ArrayList
();
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(new Punkt(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.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Wie viele Punkte einlesen?");
ArrayList<Punkt> Punktliste = new ArrayList<>();
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 =new Punkt( 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());
}