Java Klassenarray

12/27/2012 00:33 Warnuk3r#1
Sers leutz.

Ich bin gerade dabei ein Programm zu erstellen, dass Personen aufnehmen kann. Sprich den Vor- und Nachnamen etc. und man dann in einer Textdatei die Personen gespeichert hat

Ich wollte das nun so realisieren, dass ich eine Klasse namens "person" mit Attributen wie Nach- und Vorname usw. erstelle. Dann gibt es im Menü meines Programmes die Menüpunkte "Person aufnehmen", "Personen von Datei laden", "Personen in Datei speichern".

Person aufnehmen: Dort gelangt man sozusagen zum "Formular", in dem man die Daten (Nachname usw) eingibt und diese werden dann in eine Instanz der Klasse gespeichert. Das heißt also sie gelangen erst einmal in den "Speicher", werden aber noch NICHT in die Datei geschrieben. Wenn man eine Person also aufgenommen hat (in den "Speicher", sprich die Instanz) soll man noch die Möglichkeit bekommen, noch weitere Personen einzugeben.

Und hier taucht mein/e Problem/Frage auf. Ich möchte, dass man also mehrere Personen eintragen kann, aber diese alle in der Instanz gespeichert werden. Erst wenn man auf den Menüpunkt "Personen in Datei speichern" geht, sollen die Personen erst richtig "gespeichert" werden, d.h. in die Datei eingetragen werden.

Wenn ich nun

Code:
person p1 = new person();
p1.addPers();
benutzen würde, könnte ich ja aber nur 1 Person zur gleichen Zeit aufnehmen.

Somit dachte ich mir also, dass ich Arrays benutzen könnte:

Code:
person p1[] = new person[6];
p1[0].addPers(); // Daten in Instanz aufnehmen
p1[1].addPers();
p1[2].addPers();
p1[3].addPers();
p1[4].addPers();
p1[5].addPers();
Und da sieht man schon, dass ich hier nur maximal 6 Leute gleichzeitig aufnehmen kann und somit stellt sich meine Frage an euch: Wie kann ich das mit dem Array realisieren, damit es unendlich Personen gleichzeitig aufnehmen könnte? Oder wie sollte ich das sonst machen?

Mit freundlichem Gruß
Wr3
12/27/2012 00:46 xNopex#2
Quote:
Wie kann ich das mit dem Array realisieren, damit es unendlich Personen gleichzeitig aufnehmen könnte?
Gar nicht. Bzw mit unglaublichen Aufwand.

Quote:
Oder wie sollte ich das sonst machen?
Eine Liste wäre hier sicher keine schlechte Wahl. z.B. sowas hier: [Only registered and activated users can see links. Click Here To Register...]
oder
[Only registered and activated users can see links. Click Here To Register...]
12/27/2012 00:50 niko_d#3
War schwachsinn was ich geschrieben hab :D
12/27/2012 09:47 Kinu#4
Les dich mal in Datenstrukturen ein ;)

Wie schon erwähnt, wäre für deinen Fall eine Liste und kein Array von Vorteil.
Code:
List<Person> personList = new LinkedList<Person>();
personList.add(person1);
oder halt die ArrayList..
12/27/2012 15:31 Warnuk3r#5
Habe mir das mal kurz angeschaut. Ich würde dann aber die Klasse Person nicht mehr benutzen oder? Ich mache das ganze halt für die Schule und soll schon die Klasse dafür benutzen.
12/27/2012 16:16 niko_d#6
Doch eigentlich schon. Du musst der List sagen welche Daten er speichern soll und das sind bei dir Daten von der Klasse Person.

Kinu hats eigentlich schon beschrieben:
Code:
List<Person> personList = new LinkedList<Person>();

//Immer wenn der User eine neue Person zu der personList adden will
Person p = new Person("Name", "Nachname",...);
personList.add(p);
01/07/2013 21:45 Warnuk3r#7
Bei der Ausgabe kommt da [p.Person@42e816] (also Variablen- und Klassenname als auch die Adresse) - wie kriege ich das hin es richtig auszugeben/anzusprechen, sprich Nachname usw.?
01/07/2013 21:52 Obilee#8
Du gibst ja auch eine Referenz aus, es macht nur Sinn die Attribute für jede Person auszugeben.
01/07/2013 21:56 Warnuk3r#9
Ja habe grade raus gefunden, dass ich ganz einfach System.out.println(p); damit mache.

Und ja ich möchte die Attribute, aber wie soll das mit GET (von list) gehen?
01/07/2013 22:01 Mikoplianos#10
Theoretisch könntest du auch einen Suchbaum benutzen

aber in deinem Fall mich da nur anschließen..obwohl der Parser bei einer Liste etwas länger braucht,wäre das hier nur zu empfehlen
01/07/2013 22:02 Obilee#11
Code:
for(Person p : personenListe) {
//alle attribute ausgeben z.b p.getName();
}
damit geht er durch alle einträge der liste automatisch durch

@Mikoplianos

solche Überlegungen muss man erst machen wenn die Anzahl der Einträge in die Tausende geht, alles davor is sowas von wayne.
01/07/2013 22:06 Warnuk3r#12
Achso danke, hab das vorhin gesehen aber ich dachte das war eine ganz normale Bedingung nur und somit hab ich das nicht weiter beachtet :( Verwirrte mich etwas :x
01/07/2013 22:08 Obilee#13
Bedingungen sind nur mit if , else if oder ? gekennzeichnet ( while und for laufzeitbedingungen mal ausgenommen ).
01/07/2013 22:10 Mikoplianos#14
@Obilee

du hast Recht.War auch nur ne Side-Note.

Der Wirtschaftsinformatiker kommt automatisch in mir hoch,wenn ich solche Überlegungen bzw Fragen lese.
Also nvm. ;)
01/07/2013 22:20 Warnuk3r#15
EDIT: Okay vergisst es, ich war zu blöd zum lesen xDD

Quote:
Originally Posted by Mikoplianos View Post
@Obilee

du hast Recht.War auch nur ne Side-Note.

Der Wirtschaftsinformatiker kommt automatisch in mir hoch,wenn ich solche Überlegungen bzw Fragen lese.
Also nvm. ;)
Studiere ich grade :s

EDIT2: Danke dir auch Miko :)

PS: Danke Obilee, es funktioniert wunderbar :)