OOP Richtige Verwendung von ArrayList und equals

Alleswirdgut

Mitglied
Hallo,

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");
    
       }
    }
}
Danke für die Hilfe im Voraus.
 
Zuletzt bearbeitet von einem Moderator:

truesoul

Top Contributor
Hallo.

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?

Grüße
 

Alleswirdgut

Mitglied
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();
       }
 

VfL_Freak

Top Contributor
Moin,
so richtig verstehe ich Dein Problem zwar auch nicht, aber suchst Du etwa sowas?
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);
Überdenke zudem bitte mal Deine Variablennamen !!

VG Klaus
 

SchwarzWeiß

Bekanntes Mitglied
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.
 

Alleswirdgut

Mitglied
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?
 

SchwarzWeiß

Bekanntes Mitglied
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...
 

Alleswirdgut

Mitglied
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).
   }

Was ist Falsch?
 

T_T

Bekanntes Mitglied
Wie bereits @VfL_Freak geschrieben hat:
Moin,

innerhalb einer Schleife ?? :rolleyes:

Vielleicht erklärst Du mal genau, was Du Du vorhast ... es scheint hier nämlich keiner zu verstehen!

VG Klaus

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"));
 
Zuletzt bearbeitet:

SchwarzWeiß

Bekanntes Mitglied
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.
 

Alleswirdgut

Mitglied
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?
 

Alleswirdgut

Mitglied
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?
 

SchwarzWeiß

Bekanntes Mitglied
Die Variable wird nach dem Schleifendurchgang sowieso wieder gelöscht. Du könntest auch genauso gut
Java:
al.add(new Person(name, geboren));
schreiben.
Die Instanzen sind in Index 0 und 1 gespeichert, genau. Und so kannst du dann auch darauf zugreifen.
 

Alleswirdgut

Mitglied
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?
 

SchwarzWeiß

Bekanntes Mitglied
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...
 
Zuletzt bearbeitet:

SchwarzWeiß

Bekanntes Mitglied
Du musst jahr noch einen Wert geben.
Java:
for(Person person : al)
durchläuft die komplette Liste. Wenn du beispielsweise
Java:
for(Person person : al){
      System.out.println(person.getGeburtsjahr);
}
schreibst, werden die Geburtsjahre aller Personen, die in der Liste sind, ausgegeben.
 

SchwarzWeiß

Bekanntes Mitglied
Du kannst das, was momentan in der while-Schleife steht, stattdessen nach der while-Schleife schreiben, dann sollte es passen.
Java:
System.out.print("Bezugsjahr zur Altersbestimmung eingeben:");
jahr = input.nextInt();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Keine richtige Doku Java Basics - Anfänger-Themen 5
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
M Kennt jemand die richtige Lösung? Java Basics - Anfänger-Themen 7
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
D Richtige Kommentierung Klassenvariablen Java Basics - Anfänger-Themen 19
G Die richtige Methode aus einer DTO auszurufen Java Basics - Anfänger-Themen 27
E Die richtige Suche in der API Java Basics - Anfänger-Themen 1
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
L Collections Ist eine Arraylist hier das richtige? Java Basics - Anfänger-Themen 12
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
I Richtige Java-Version finden? Java Basics - Anfänger-Themen 17
Meeresgott Richtige Dokumentation Java Basics - Anfänger-Themen 1
Meeresgott Richtige Dokumentation Java Basics - Anfänger-Themen 22
P Klassen Richtige Anwendung einer Enum-Klasse Java Basics - Anfänger-Themen 11
H Ist Java überhaupt die richtige Sprache für das Projekt? Java Basics - Anfänger-Themen 8
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
A richtige Kombination aus Werte- und Referenztypen Java Basics - Anfänger-Themen 63
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
E Richtige Ausgabe nur mit toString() - Warum? Java Basics - Anfänger-Themen 4
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
X Methoden Wort aus String löschen und richtige Verschachtelung Java Basics - Anfänger-Themen 17
X Ist Java für mich das richtige? Java Basics - Anfänger-Themen 10
D Simulation von Geburt/Tod und "richtige" Erkennung eines Hindernisses Java Basics - Anfänger-Themen 7
F In ArrayList wird nicht der richtige Wert gespeichert Java Basics - Anfänger-Themen 6
S Richtige String-Variable finden Java Basics - Anfänger-Themen 3
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
P Ist Java die richtige Programmiersprache dafür? Java Basics - Anfänger-Themen 29
Dit_ invokeLater | richtige Anwendung Java Basics - Anfänger-Themen 2
L eine richtige anfänger-frage Java Basics - Anfänger-Themen 3
J FileOutputStream richtige Pfadangabe? Java Basics - Anfänger-Themen 8
D Der richtige Layout Manager Java Basics - Anfänger-Themen 8
P Keine richtige Codeabarbeitung?! Java Basics - Anfänger-Themen 9
U Richtige Benutzung der API-Doku Java Basics - Anfänger-Themen 8
G Richtige Syntax für Bruch Java Basics - Anfänger-Themen 12
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
G Polymorphismus und die richtige Anwendung Java Basics - Anfänger-Themen 6
B Ist Java das richtige für mich? Java Basics - Anfänger-Themen 12
W Java das richtige? Java Basics - Anfänger-Themen 9
L JTabbedPane, richtige Übergabe von Tabs Java Basics - Anfänger-Themen 18
M Welche Javaversion ist die Richtige? Java Basics - Anfänger-Themen 14
S Java Games Programieren. Der richtige Weg dorthin. Java Basics - Anfänger-Themen 4
M Java die richtige Sprache? Java Basics - Anfänger-Themen 4
S Web Mining - XML Filter der richtige Anstatz? Java Basics - Anfänger-Themen 2
W Java Web Start das richtige? Java Basics - Anfänger-Themen 11
J Richtige Auagabe in einer *.txt Java Basics - Anfänger-Themen 2
B Ist Java das richtige für folgendes Programm! Java Basics - Anfänger-Themen 2
T Bild drehen + richtige größe berechnen Java Basics - Anfänger-Themen 4
M Richtige Paarungen aus Array ausgeben Java Basics - Anfänger-Themen 2
S richtige antworten [%] ausgabe Java Basics - Anfänger-Themen 7
bernd Richtige Pfadangabe für das Kopieren von Dateien Java Basics - Anfänger-Themen 10
A Java wirklich das richtige? Java Basics - Anfänger-Themen 20
B Paar richtige Anfängerfragen Java Basics - Anfänger-Themen 7
T Verwendung jna Java Basics - Anfänger-Themen 15
L Zufälligen Zahlencode, ohne mehrfacher Verwendung einer Ziffer Java Basics - Anfänger-Themen 15
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
H Datentypen Fehler bei Verwendung von enum Java Basics - Anfänger-Themen 9
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D native Methoden, Verwendung? Java Basics - Anfänger-Themen 8
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
G verwendung von regex Java Basics - Anfänger-Themen 3
K Problem bei der Verwendung von Gregorian Calender Java Basics - Anfänger-Themen 3
T NullPointerException bei Verwendung einer Klasse einer anderen .jar datei Java Basics - Anfänger-Themen 3
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
B Verwendung von Arrays Java Basics - Anfänger-Themen 2
U Verwendung von Interface Java Basics - Anfänger-Themen 33
A Methoden Verwendung von crypt? Java Basics - Anfänger-Themen 2
D Muss ich eigentlich immer auf die Verwendung des richtigen Datentyps achten? Java Basics - Anfänger-Themen 7
D reg Exp, verwendung des endezeichen "$" Java Basics - Anfänger-Themen 5
C Verwendung von Schleifen? Java Basics - Anfänger-Themen 18
J Datentypen Array - Verwendung im Konstruktor Java Basics - Anfänger-Themen 8
C Verwendung von primitiven Datentypen Java Basics - Anfänger-Themen 8
J Problem mit NullPointerException bei Verwendung eines Arrays Java Basics - Anfänger-Themen 6
D Frage zur Verwendung einer Schnittstelle Java Basics - Anfänger-Themen 4
A Verwendung von abstrakten Klassen Java Basics - Anfänger-Themen 17
D Verwendung der Klasse Map Java Basics - Anfänger-Themen 9
C Verwendung von Matrizen in einer Schleife Java Basics - Anfänger-Themen 5
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
I Verwendung von Constant Field Values Java Basics - Anfänger-Themen 4
J Verwendung von eigenen Klassen in JSP Java Basics - Anfänger-Themen 2
G try. catch Verwendung Java Basics - Anfänger-Themen 11
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
H Verwendung lokaler Einstellungen Java Basics - Anfänger-Themen 4
G getName, substring Verwendung Java Basics - Anfänger-Themen 3
I Fehler bei Verwendung von substring Java Basics - Anfänger-Themen 4
S Verwendung von Super Java Basics - Anfänger-Themen 7
M Verwendung von Robot... wie? Java Basics - Anfänger-Themen 6
M Verwendung von "this" Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben