Collections ArrayList mit eigenen Objekten befüllen

Sora

Mitglied
Hallo,
das ist meine erster Post hier und schon eine Frage zu Hausaufgaben in Informatik. Wahrscheinlich nicht der beste Start aber ich komm wirklich irgendwie nicht weiter.
Kleine Denkansätze oder sagen wo irgendwo ein Denkfehler von mir ist würde mir super weiterhelfen.

Die Hausaufgabe war mit Hilfe einer Arraylist eine Sammlung von eigen erstellten Objekten (Kontakte) anzulegen. (Die Aufgabenstellung erinnert mich sehr an Verkettete Listen in C. Ein thema das ich bis aufs letzte nicht begriffen habe).

Nun scheint es mich auch in Java zu erreichen und ich hoffe ihr könnt mir dabei weiterhelfen.

Das ganze sieht bis jetzt so aus:

Die Person Klasse:
Java:
public class Person {

	    // Attribute
		private String name;
		private int alter;
		private String email;

		// Konstruktor
		public Person(String name, int alter, String email){
		name = this.name;
		alter = this.alter;
		email = this.email;		
		}	
	
	
}

Die Hauptklasse:
Java:
import java.io.*;
import java.util.ArrayList;


public class Kontaktbuch {
	
	public ArrayList<Person>eingeben(){
		
			BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));

			ArrayList<Person> kontaktliste = new ArrayList<Person>();
			
			try {
					
						System.out.println("Name: ");
						String name = eingabe.readLine();
				
						while (!name.equals("Ende")) {

						System.out.println("Alter: ");
						int alter = Integer.parseInt(eingabe.readLine());

						System.out.println("eMail: ");
						String email = eingabe.readLine();

						Person person = new Person(name, alter, email);

						kontaktliste.add(person);
						
						System.out.println("Name: ");
						name = eingabe.readLine();
					
				}

			} catch (IOException e) {
				e.printStackTrace();
			}

			return kontaktliste;
		}


	public static void main(String[] args) {
		Kontaktbuch o = new Kontaktbuch();
		o.eingeben();

	}

}

Nun habe ich schon ewig daran herumprobiert. Im Debug hab ich dann festgestellt das Irgendwie die Werte wo ich eingebe zwar ankommen aber irgendwie nicht das Objekt damit erstellt wird?? Da steht dann immer null oder 0.

Ich kann mir nicht erklären woran das liegen könnte da ich aus meiner Sicht finde, dass der code wunderlaufen müsste.

Freue mich auf antworten :)
 

Kiri

Bekanntes Mitglied
Das
Java:
name = this.name;
alter = this.alter;
email = this.email;

müsste wie folgt lauten:
Java:
this.name = name;
this.alter = alter;
this.email = email;
 
Zuletzt bearbeitet:

Sora

Mitglied
Ohje und schon das nächste Problem.

Ich versuche nun die ArrayList zu übergeben.

Dafür hab ich die Klasse um folgendes Erweitert:

Java:
	public void ausgeben(ArrayList<Person> p) {

		for (int i = 0; i < p.size(); i++) {
			System.out.println(p.get(i));
		}

	}
und die main Methode sieht jetzt so aus:

Java:
public static void main(String[] args) {
		Kontaktbuch o = new Kontaktbuch();
        o.ausgeben(o.eingeben());
	}

Doch Anstatt dass ich die Elemente von dem Array erhalte, liefert der mir nur die Referenzadresse.

Wenn ich nun
Java:
System.out.println(p.get(i).name);
mache bekomme ich ein Person.name is not visible.

Muss ich dafür jetzt die Getter und Setter Methoden verwenden?

Kommt mir irgendwie zu umständlich vor.
 

Kiri

Bekanntes Mitglied
...mache bekomme ich ein Person.name is not visible.

Muss ich dafür jetzt die Getter und Setter Methoden verwenden?

Kommt mir irgendwie zu umständlich vor.

Da name private ist, ist es nicht nach außen sichtbar. Dafür wird ein Getter benötigt, richtig erkannt! Einfach aus Probieren!!!
 

Thunderstorm

Mitglied
Zitat :
Muss ich dafür jetzt die Getter und Setter Methoden verwenden?
Kommt mir irgendwie zu umständlich vor.

Die privacy ist eine der wichtigsten Elemente der OOP. Nur die Attribute die wirklich zwingend nach außen sichtbar sein müssen werden dann auch so deklariert. Ansonsten IMMER private und mit getter und setter arbeiten. Du willst ja auch nicht, dass man bei dir zu Hause einfach reinkommt ohne das man dich vorher fragt :popcorn:

lg Thunder
 

Neue Themen


Oben