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 versuche gerade, den Gedanken bei der Verwendung von ArrayList mit Objekten zu verstehen. Ich habe hier 2 Klassen. So wie ich es verstanden habe wird hier nur ein Index erstellt bei der ArrayList und zwar so, dass die if Bedingung immer erfüllt ist. Wenn man nur ein Objekt erstellt, dann kann man das doch alles weg lassen? Wie sieht der Code aus, wenn mehrere Objekte erstellt werden müssen?
Java:
package Altersbestimmung;
public class Person {
private String name;
private int geboren;
public Person(String namePerson, int geburtsjahr) {
name = namePerson;
geboren = geburtsjahr;
}
public String getName () { return name; }
public int getGeburtsjahr() { return geboren; }
public void setName (String neu ) { name=neu; }
public void setGeburtsjahr(int jahr) { geboren=jahr; }
public int getAlter(int imJahr){ return imJahr - geboren; }
}
Java:
package Altersbestimmung;
import java.util.ArrayList;
public class AltersbestimmungOOP {
public static void main(String[] args) {
int jahr,geboren=0;
String name="";
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.print("Name eingeben:");
name = input.next();
System.out.print("Geburtsjahr:");
geboren = input.nextInt();
System.out.print("Bezugsjahr zur Altersbestimmung eingeben:");
jahr = input.nextInt();
ArrayList<Person> al = new ArrayList <Person>();
Person p1 = new Person(name,geboren);
al.add(p1);
if (name.equals(p1.getName())){
geboren = p1.getGeburtsjahr();
System.out.print(p1.getName());
System.out.println(" wurde "+geboren+ " geboren");
System.out.println("Er ist im Jahr "+jahr + " "+p1.getAlter(jahr)+ " Jahre alt");
}
else {
System.out.println("Person nicht vorhanden");
}
}
}
Packe mal dein Code in Code Tags rein.
Einfügen->Code->Java
Ich verstehe die Problemstellung nicht?
Was ich sehe ist, du erzeugst eine Person und fügst diese einer Liste hinzu.
Aber weiteres machst du nicht mit der Liste.
Wo besteht ein Problem?
Ich weiß nicht wie ich es so machen kann, dass durch eine Abfrage mehrere Objekte in dem ArrayList gespeichert wird. Weil so wie ich es versanden habe wird nur ein Objekt erstellt. Meine Idee dazu (leider funktioniert das nicht)
Java:
package Altersbestimmung;
import java.util.ArrayList;
public class AltersbestimmungOOP {
public static void main(String[] args) {
int jahr,geboren=0;
String name="";
int a=1;
int x=0;
java.util.Scanner input = new java.util.Scanner(System.in);
ArrayList<Person> al = new ArrayList <Person>();
while (a==1){
System.out.print("Name eingeben:");
name = input.next();
System.out.print("Geburtsjahr:");
geboren = input.nextInt();
System.out.print("Bezugsjahr zur Altersbestimmung eingeben:");
jahr = input.nextInt();
Person x = new Person(name,geboren);
al.add(x);
x=1+x;
System.out.println("Weitere Personen eintragen? Ja=1; Nein=0");
a = input.nextInt();
}
Du hast in deinem Code von #4 zwei Variablen mit dem Namen x, das ist eine beliebte Fehlerquelle, benenne mal den Namen der einen Variable zu "person" um.
Ok. Also es wird ja ein Objekt erstellt mit den dazugehörigen Attributen also Objekt "p1". Es soll aber nach Wunsch mehrere Objekte erstellt werden z.B. p1, p2, p3 und so weiter, je wie viele Objekte es sein sollen.
Beispiel: Hans 1994 geb., Klaus 1988 geb. und Franz 1976 geb..
Wenn ich jetzt Hans und seine Daten eingebe, dann wird er in die ArrayList eingetragen. Das Programm ist beendet.
Ich möchte aber auch Klaus eintragen ... und wenn ich den Code nochmal abspiele (Run), dann ist doch Hans nicht mehr in der ArrayList oder? Ich kenne es halt so, dass nichts abgespeichert nach dem abspielen. Oder ist es anders?
Wenn ich dich richtig verstehe, willst du, dass die Liste auch gespeichert ist, wenn du den PC wieder neustartest? Dann musst du das in eine Datei speichern...
OK verstehe und wie sieht es aus, wenn ich Objekte in der Laufzeit erstellen möchte?
z.B.
Java:
ArrayList<Person> al = new ArrayList<Person>();
Person p1 = new Person(name,geboren);
al.add(p1);
Person p5 = new Person(name1,geboren1);
al.add(p5);
Hier werden ja 2 Objekte erstellt, die in der ArrayList abgespeichert werden oder?
Wie sieht es aus, wenn ich beliebig viele Objekte speichern möchte (und nicht nur 2) in die ArrayList?
Meine Idee:
Java:
package Altersbestimmung;
import java.util.ArrayList;
public class AltersbestimmungOOP {
public static void main(String[] args) {
int jahr,geboren=0;
String name="";
int a=1;
int x=0;
java.util.Scanner input = new java.util.Scanner(System.in);
ArrayList<Person> al = new ArrayList <Person>();
while (a==1){
// Durch die while Schleife spielt er es so lange den Inhalt ab bis keine Personen eingetragen werden
System.out.print("Name eingeben:");
name = input.next();
System.out.print("Geburtsjahr:");
geboren = input.nextInt();
System.out.print("Bezugsjahr zur Altersbestimmung eingeben:");
jahr = input.nextInt();
Person x = new Person(name,geboren);
// Das Objekt x wird erschaffen (x ist nicht möglich). x hat hier 0
al.add(x);
x=1+x; // x=0 wird zu x=1.
System.out.println("Weitere Personen eintragen? Ja=1; Nein=0");
a = input.nextInt(); //wenn a gleich 1 bleibt ist die Bedingung in der while Schleife erfüllt und er beginnt von vorne, aber diesmal mit x=1 und dadurch wird ein neues Objekt erstellt (Objekt mit dem Namen 1).
}
Mit einer Schleife, die erst dann aufhört, wenn du es möchtest
z. B.
Java:
ArrayList<Person> personen = new ArrayList<>();
Scanner scan = new Scanner(System.in);
do {
//.....erstellen und hinzufügen der Personen....
}while (!scan.next().equalsIgnoreCase("x"));
Keine Ahnung was du hier mit den URLs machst, aber wie schon gesagt, du musst das x in "person" umbenennen, das muss doch schon einen Syntaxfehler geben, wenn du mit x vom Typ Person rechnen willst. Dein x vom Typ int wird hier nie benutzt.
Und rücke mal richtig ein damit man das schneller und besser lesen kann.
Wenn ich das so mache und x als person benenne, dann wird doch das Objekt person erstellt und darauf im ArrayList abgespeichert. Er durchläuft die while Schleife nochmal und erstellt ein Objekt mit dem gleichen Namen person und speichert es in der ArrayList ab. Er überschreibt doch dadurch das erste Objekt person mit dem zweiten Objekt person oder?
Das bedeutet, dass er 2 Objekte gespeichert hat, die den gleichen Namen haben. Das eine Objekt ist in Index 0 und das andere Index 1 hinterlegt. So richtig?
Ok super. Und wie löse ich das Problem "Variable werden gelöscht"?
Java:
package Altersbestimmung;
import java.util.ArrayList;
public class AltersbestimmungOOP {
public static void main(String[] args) {
int jahr, geboren;
String name = "";
int a = 1;
java.util.Scanner input = new java.util.Scanner(System.in);
ArrayList<Person> al = new ArrayList<Person>();
while (a == 1) {
System.out.print("Name eingeben:");
name = input.next();
System.out.print("Geburtsjahr:");
geboren = input.nextInt();
System.out.print("Bezugsjahr zur Altersbestimmung eingeben:");
jahr = input.nextInt();
Person person = new Person(name, geboren);
al.add(person);
//al.add(new Person(name, geboren));
System.out.println("Weitere Personen eintragen? Ja=1; Nein=0");
a = input.nextInt();
}
if (name.equals(person.getName())) {
geboren = person.getGeburtsjahr();
System.out.print(person.getName());
System.out.println(" wurde " + geboren + " geboren");
System.out.println("Er ist im Jahr " + jahr + " " + person.getAlter(jahr) + " Jahre alt");
} else {
System.out.println("Person nicht vorhanden");
}
}
}
Ab der if Bedingung kann er nicht auf person zugreifen, weil es in der Schleife ist. Wie löst man das?
Die if-Bedingung soll die Liste durchgehen und nach dem Namen suchen, den du in der Variable name definiert hast und dann die Infos über die Person ausgeben oder?
Das sollte so funktionieren: (den if-Code hab ich jetzt einfach von dir kopiert)
Java:
for(Person person : al){
if (name.equals(person.getName())) {
geboren = person.getGeburtsjahr();
System.out.print(person.getName());
System.out.println(" wurde " + geboren + " geboren");
System.out.println("Er ist im Jahr " + jahr + " " + person.getAlter(jahr) + " Jahre alt");
} else {
System.out.println("Person nicht vorhanden");
}
}
EDIT: die URL anstatt "System" wurden beim Kopieren selbst erstellt, es scheint wohl gerade Probleme zu geben...