# ArrayList<Object> als Liste von Strings ausgeben?



## Yamie (12. Nov 2016)

Hallo zusammen, ich bin erst neu dabei und suche nun schon seit Stunden nach einer Lösung
Wahrscheinlich ist es ganz einfach und ich merke es nur nicht


Ich habe eine ArrayList von Objekten und würde diese gerne in der Console als Text ausgeben
Bislang aber leider ohne Erfolg, das beste was ich hin bekommen habe waren die Hashwerte 

Das ganze sieht etwa so aus;


```
private ArrayList<Teilnehmer> teilnehmerliste = new ArrayList<Teilnehmer>();
```

Hier werden dann von einer anderen Klasse Teilnehmer eingetragen, das klappt auch alles wunderbar, nun möchte ich aber die eingetragenen Teilnehmer als Liste von Strings in der Konsole ausgeben

Ich weiß nicht ob ich hier überall die richtigen Begrifflichkeiten verwende, wenn was falsch ist bitte bescheid geben

Danke


----------



## Tarrew (12. Nov 2016)

Hat deine Klasse "Teilnehmer" die toString() Methode sinnvoll überschrieben?

Mal als Beispiel:

```
import java.util.ArrayList;
import java.util.List;

/**
* Created by Niklas on 12.11.2016.
*/
public class Teilnehmer {
    String vorname;
    String nachname;
    String adresse;
    int alter;

    public Teilnehmer(String vorname, String nachname, String adresse, int alter) {
        this.vorname = vorname;
        this.nachname = nachname;
        this.adresse = adresse;
        this.alter = alter;
    }

    @Override
    public String toString() {
        return vorname + " " + nachname + "(" + alter + ")" + " | " + adresse;
    }

    public static void main(String[] args) {
        List<Teilnehmer> list = new ArrayList<>();
        list.add(new Teilnehmer("Peter", "Müller", "Buchweg 7", 57));
        list.add(new Teilnehmer("Martina", "Mersch", "Schillerstraße 18", 66));
        list.add(new Teilnehmer("Johannes", "Löcken", "Taubenweg 28", 55));

        System.out.println(list);
    }
}
```


----------



## Yamie (12. Nov 2016)

Danke, ich glaube das Problem ist, dass ich nicht versuche Strings aus zu geben, sondern die Namen der Instanzen


----------



## Tarrew (12. Nov 2016)

Ja und das liegt daran, dass deine toString Methode vermutlich nicht überschrieben wurde? 

Heißt das, dass du das Problem gelöst hast oder hast du immer noch Probleme? Falls ja, dann wäre es gut mehr von deinem Code zu sehen.


----------



## Yamie (12. Nov 2016)

Das hier ist mein Teilnehmer


```
import java.util.ArrayList;
import java.util.List;

public class Teilnehmer {
    private ArrayList<Übungsgruppe> übungsliste = new ArrayList<Übungsgruppe>();

  
    public Teilnehmer(){

    }

    public void belegt(Übungsgruppe übungsgruppe){
        übungsgruppe.voll();
        boolean voll = übungsgruppe.voll();
        if(!voll)
        {
            if(!übungsliste.contains(übungsgruppe))
            {
                übungsliste.add(übungsgruppe);
                übungsgruppe.belegtvon(this);         
            }
        }
        else
        {
            System.out.println("Gruppe ist voll");
        }
    }

    public void verlässt(Übungsgruppe übungsgruppe){
        übungsgruppe.voll();
        if(übungsliste.contains(übungsgruppe))
        {
            übungsliste.remove(übungsgruppe);
            übungsgruppe.entferne(this);
        }
    }
}
```

Und das hier die Übungsgruppe die mir eine Liste der Teilnehmer geben soll


```
import java.util.ArrayList;
import java.util.List;

public class Übungsgruppe {
    private Vorlesung vorlesung;
    private ArrayList<Teilnehmer> teilnehmerliste = new ArrayList<Teilnehmer>();
    private int anzahl;

    public Übungsgruppe(Teilnehmer teilnehmer1,Teilnehmer teilnehmer2,Teilnehmer teilnehmer3){
        teilnehmerliste.add(teilnehmer1);
        teilnehmer1.belegt(this);
        if(teilnehmer2!=teilnehmer1)
        {
            teilnehmerliste.add(teilnehmer2);
            teilnehmer2.belegt(this);
        }
        else
        {
            System.err.println("Teilnehmer dürfen nicht mehrfach vorkommen, Teilnehmer 2 war gleich Teilnehmer 1");
        }
        if(teilnehmer3!=teilnehmer1)
        {
            if(teilnehmer3!=teilnehmer2)
            {
                teilnehmerliste.add(teilnehmer3);
                teilnehmer3.belegt(this);
            }
            else
            {
                System.err.println("Teilnehmer dürfen nicht mehrfach vorkommen, Teilnehmer 3 war gleich Teilnehmer 2");
            }
        }
        else
        {
            System.err.println("Teilnehmer dürfen nicht mehrfach vorkommen, Teilnehmer 3 war gleich Teilnehmer 1");
        }
    }

    public void gehörtzu(Vorlesung vl){
        vorlesung = vl;
        vorlesung.fügeHinzuÜbungsgruppe(this);
    }

    public void entferne(Teilnehmer teilnehmer) {
        if(teilnehmerliste.contains(teilnehmer)){
            teilnehmerliste.remove(teilnehmer);
        }
    }

    public void belegtvon(Teilnehmer teilnehmer){
        if(!teilnehmerliste.contains(teilnehmer)){
            teilnehmerliste.add(teilnehmer);             
        }  
    }

    public boolean voll(){
        anzahl = teilnehmerliste.size();

        if(anzahl >= 30){
            return true;
        }
        else
        {
            return false;
        }
    }

    public void zeigeListe(){

    }
}
```

die public void zeigeListe() soll dann bei aufruf die Liste ausgeben


95% von dem code haben nichts mit meinem problem oder der frage zu tun, aber vielleicht verschafft es etwas übersicht


----------



## Yamie (12. Nov 2016)

Wenn ich sowas zu Ausgabe nutze


```
String sa = teilnehmerliste.toString();
    System.out.println(sa);
```

wie muss ich dann die toString Methode überschreiben, dass es mir die Namen der Instanzen von Teilnehmer ausgibt?


----------



## Tarrew (12. Nov 2016)

Was meinst du mit "Name der Instanzen" ? Wenn du es so machst wie jetzt dann wird ja schon die Referenz der jeweiligen Teilnehmer ausgegeben, also sowas wie


> [java_forum.Teilnehmer@677327b6, java_forum.Teilnehmer@14ae5a5, java_forum.Teilnehmer@7f31245a]


Wie stellst du dir denn vor, wie deine Ausgabe aussehen soll?


----------



## Yamie (12. Nov 2016)

Ah danke, ich bin nun schon viel weiter, auch weil ich nun weiß, dass die Override toString Methode in den Teilnehmer muss und nicht in die Übungsgruppe

Ich benutze momentan BlueJ und kann da einzelne Instanzen erstellen und sie benennen, aber den Namen kann ich mir wohl nicht ausgeben lassen, oder?

Also wenn ich einzelnen Teilnehmer mit zusätzlichen Attributen initialisiere, dann weiß ich nun wie ich daran komme, danke 


Momentan wars mehr sowas 

```
[Teilnehmer@19c5490, Teilnehmer@1a3c1bb, Teilnehmer@a15eab]
```


----------



## Tarrew (12. Nov 2016)

Ich kenne BlueJ nur noch aus der Schule, das ist einige Jahre her. Diesen Namen den man Objekten gibt ist ja kein Attribut der Klasse Teilnehmer sondern vermutlich dieser Klasse: 
http://bluej.org/doc/extensionsAPI/bluej/extensions/BObject.html

Denke mal, dass du mit der Methode "getInstanceName" Glück haben solltest. Allerdings ist es mMn besser, der Klasse Teilnehmer einfach ein Attribut mit Namen zu verpassen.


----------



## mike2707 (12. Nov 2016)

Gelöscht, da Vorschlag falsch war.


----------



## Yamie (12. Nov 2016)

Ich habe den Teilnehmern jetzt mal Namen gegeben und es funktioniert auch prima, ich hatte mich da irgendwie fest gefahren und die ganze Zeit versucht die Hashes wieder in Strings zu wandeln
Vielen Dank für deine Hilfe, mein Problem ist damit gelöst


----------



## mrBrown (12. Nov 2016)

mike2707 hat gesagt.:


> For (String Item : Teilnehmerliste)
> Geschweifte Klammer auf
> System.out.println(Item)
> Klammer zu.
> ...


Das ist sowohl am Problem vorbei als auch einfach falsch.


----------



## mike2707 (12. Nov 2016)

Warum? Er wollte eine Ausgabe der Liste. Was ist daran falsch. Vielleicht habe ich das Array vergessen. Dann sorry.


----------



## mike2707 (12. Nov 2016)

Teilnehmerliste.get(Item).?


----------



## mrBrown (12. Nov 2016)

mike2707 hat gesagt.:


> Warum? Er wollte eine Ausgabe der Liste. Was ist daran falsch. Vielleicht habe ich das Array vergessen. Dann sorry.



Es wird nicht mal kompilieren, weil Teilnehmer keine Strings sind. Und selbst wenn es mit toString direkt umgewandelt werden würde, würde das das Problem der nicht überschreibenen toString nicht lösen.



mike2707 hat gesagt.:


> Teilnehmerliste.get(Item).?


?


----------



## mike2707 (12. Nov 2016)

Du hast recht. Gute Nacht.


----------

