# Objekte in Liste speichern



## Hawk23 (19. Nov 2012)

Hallo zusammen,

ich habe ein kleines Problem und wäre sehr dankbar wenn ihr mir kurz helfen könntet!

Ich habe ein Programm geschrieben, dass Studentennamen abfragt und dann Objekte dazu erstellt.
Wenn ich nun die Objekte in meine erstellte Studentenliste speichere und ausgebe kommt 
eine Ausgabe wie Person@53c059f6 etc. heraus

Als ich nur die Strings gespeichert habe und nicht die Objekte gespeichert habe, hat es funktioniert..

Was mache ich falsch? 

Hier die Main:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class App {

	
	public static void main(String[] args) throws Exception {
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		int capacity = 0;
		int grow = 1;
		int index = 0;
		StudList StudList1 = new StudList (capacity,grow); 
		String Vorname = "a";
		int j= 0;
		
		for (capacity =0; ; j++,capacity++)
		{
			
			System.out.println("Geben Sie den Vornamen des " + (j+1)+ ".Studenten ein!");
			Vorname = reader.readLine ();
			if (Vorname.equals(""))
			{
				break;
			}
			System.out.println("Geben Sie den Nachnamen des " + (j+1)+ ".Studenten ein!");
			String Nachname = reader.readLine();
			Person Person1 = new Person (Vorname,Nachname);
			Person1.getfullname();
			StudList1.setAt (capacity, Person1);
			//capacity = capacity+1;
			//StudList1.setAt (capacity, Nachname);
			
			
		}
		StudList1.getAt(0);
		
		for (int i = 0; index < capacity ;  i++,index++)
		{
			System.out.println( (i+1) + ".Student");
			StudList1.getAt(index);
			//index = index +1;
			//StudList1.getAt(index);			
		}
}
}
```
Und die Liste:

```
public class StudList 
{
	private int Length;
	private int Grow = 1;
	private Person[] Buffer;
	
	public StudList(int capacity, int grow) 
	{
		Buffer = new Person [capacity];
		this.Grow = grow;
		this.Length = 0;
	}
	
	public void add (Person value) throws Exception
	{
		setAt (Length, value);
	}
	
	public void setAt (int index, Person person1) throws Exception
	{
		int NewLength = Buffer.length;
		while (index >= NewLength)
		{
			NewLength += Grow;
		}
		if (NewLength != Buffer.length)
		{
			Person[]temp = new Person [NewLength];
			ArrayCopy (Buffer, temp);
			Buffer = temp;
		}
		Buffer [index] = person1;
		if (Length <= index)
		{
			Length = index +1;
		}
	}
	
	public Person getAt (int index) throws IndexOutOfBoundsException
	{
		System.out.println (Buffer [index]);
		if (index >= Length)
		{
			throw new 
			IndexOutOfBoundsException ();
		}
		return Buffer [index];
	}
	
	private void ArrayCopy (
			  Person[] buffer2, 
			  Person[] temp) throws Exception
			{
			  if (buffer2.length <= temp.length)
			  {
			    for (int i = 0; i < buffer2.length; i++)
			    {
			      temp[i] = buffer2[i];
			    }
			  }
			  else
			  {
			    throw new Exception(
			      "Das Zielfeld ist kürzer als das Quellfeld.");
			  }
			}
}
```

Den Code zum Objekt Person hab ich jetzt mal herausgelassen.. da dürfte ja eig alles passen


MFG Hawk


----------



## SlaterB (19. Nov 2012)

> Was mache ich falsch? 

ein Problem ist auf jeden Fall dass du nicht genau verrätst wie es zu der Ausgabe kommt


```
for (int i = 0; index < capacity ;  i++,index++)
        {
            System.out.println( (i+1) + ".Student");
            StudList1.getAt(index);
```
klingt nach Ausgabe, aber getAt() enthält doch keine Ausgabe..
(edit: ah, jetzt erst gesehen: System.out.println (Buffer [index]); )

das Problem ist jedenfalls, dass das Objekt Person direkt ausgegeben wird, 
Java weiß nicht was es da schreiben soll, also den Standard: Klassenname + HashCode

hole Vor- und Nachname aus Person raus und gib die einzeln aus oder was auch immer,
bzw. überschreibe die toString()-Methode für eine schöne Ausgabe


----------



## TryToHelp (19. Nov 2012)

Wo bekommst du den in dem Code die Ausgabe? Also welche Zeile machst du die Ausgabe? Ich sehe da nirgends wo du was aus der Liste ausgibst.

Und dann musst du wohl bei deinem Objekt noch die toString Methode überschreiben, da die dir Momentan nicht das Liefert was du willst. Oder du muss bei deiner Ausgabe anstelle auf das Objekt, auf die Strings in dem Objekt, z.B. Vorname und Nachname zugreifen ;-)

[EDIT]Mhh zu langsam[/EDIT]


----------



## TryToHelp (19. Nov 2012)

ok, ja Slater du hast recht, da scheint die Ausgabe zu sein ;-)
Ich würde deine Ausgabe da aber rausnehmen außer sie ist nur eine debug-ausgabe und es dann in deiner Main ausgeben ;-)
Desweiteren solltest du variablen klein schreiben und nicht groß ;-)
Die lösung ist ja schon genannt, enweder 

```
System.out.println(person.getNachname);
```
oder die toString() Methode überschreiben
Sowas wie 
	
	
	
	





```
return vorname+"  "+nachname;
```


----------



## Hawk23 (19. Nov 2012)

Ahja okay, hab jetzt verstanden warum er mir immer was falsches ausgegeben hat ;-)

Ich denke, dass bekomme ich jetzt hin!

Vielen Danke für die schnelle Hilfe


----------

