Objektarray Ausgabe

Michi_1989

Mitglied
Moin,

ich habe noch ein paar Probleme mit dem Objektarrays. Habe mal zum Üben eine Class Spiele geschrieben und will die Objekte in ein Array packen und wiedergeben. Allerdings bekomme ich nicht denn Inhalt sondern nur Null als Ergebnis, obwohl ich das Objekt nochmal im Array angelegt habe. Vielleicht wisst ihr, wo mein Fehler ist.
Gruß Michi

Java:
package spieleverwaltung;

class Spiele
{    
    public int altersfreigabe;
    public String name;
    public String gerne;
    Spiele [] Spielearray = new Spiele [5];
      
    public Spiele ausgabe()
    {
        return Spielearray[0];
    } 
    
}
public class Programmstart 
{   
    public static void main(String[] args) 
    {
        Spiele a0 = new Spiele();
        Spiele a1 = new Spiele();
        Spiele a2 = new Spiele();
        Spiele a3 = new Spiele();
        Spiele a4 = new Spiele();
        System.out.println(a0);
        a0.altersfreigabe = 18;
        a0.name = "Doom 3";
        a0.gerne = "Ego-Shooter";
        
        a1.altersfreigabe = 16;
        a1.name = "Skyrim";
        a1.gerne = "RPG";
        
        a2.altersfreigabe = 18;
        a2.name = "Crysis 2";
        a2.gerne = "Ego.Shooter";
        
        a3.altersfreigabe = 18;
        a3.name = "M&M Dark Messiah";
        a3.gerne = "RGP";
        
        a4.altersfreigabe = 16;
        a4.name = "Black Mirror 3";
        a4.gerne = "Adventure";
        
        System.out.println(a0.altersfreigabe+" "+a0.name+" "+a0.gerne);
        
        a0.Spielearray [0] = new Spiele();
        a0.Spielearray[0].altersfreigabe = a0.altersfreigabe;
        System.out.println(a0.Spielearray[0].ausgabe());
    }
}
 
Du hast den Array initialisiert. D.h. Du hast Java gesagt, dass Du Speicherplatz für 5 Spieleobjekte reservieren willst. Du musst den Array aber auch füllen. Das passiert bei Dir nicht.
 
Naja dein Konzept ist auch sehr fragwürdig.
Warum sollte Spiele eine Liste von sich selbst halten?

Deine eher eine Klasse die eine Liste von Spielen hält.
Ausserdem solltest du unbedingt mit setter und getter Arbeiten.

Ausserdem solltest du das Array nicht nur initialisieren sondern auch direkt mit entsprechenden Objekten befüllen. Das geschah bei dir nicht.
 
Ich weiß, hatte zuvor auch alle drinn, hatte es allerdings jetzt anderes geamacht, sodass ich nicht mehr nur die speicheradresse bekomme. Das soll jetzt erst einmal ein Test sein. Wenns funktioniert, dann mache ich auch die anderen Plätze voll. Ich weiß allerdings echt nicht, warum ich Null bekomme obwohl ich doch das Array mit den Objekt angelegt habe . Er müsste mir doch den einen belegten Platz mit dem Objektinhalt anzeigen , oder sehe ich das falsch?

Ach, fülle ich die nicht indem ich sage, dass z.B. Spielearray [0] = sound so ist ?

Sry, das ist quasi mein erstes Experiment mit der OOP. Aber eigentlich will ich nur, dass die drei Eigenschaften der 5 Spiele im Array ausgegeben werden. Wie ich das nun genau mache, weiß ich halt nur teilweise. Wäre nett wenn mir einer für ein Spiel ein Beispiel geben könnte.
 
Zuletzt bearbeitet:
Ach, fülle ich die nicht indem ich sage, dass z.B. Spielearray [0] = sound so ist ?
Doch eigentlich schon. Aber jetzt kommt Dein krudes Design dir in die Quere. Du lässt Dir nämlich mit ausgabe() Spielearray[0] von new Spiele() anzeigen und DAS ist nicht gefüllt.
 
Hmm okay, so wie ich das verstehe, dann soll ich das Array direkt ausgeben lassen. Also ohne auf ausgabe zuzugreifen. Dann bekomme ich aber nur die Adresse. Wenn mir das einer noch erklären kann wäre es super. Ansonsten schaue ich gleich mal ins Handbuch wegen den gettern..
 
So und nu, weil ich grad nen Guten habe, mal Dein Code etwas refactort, damit er funktioniert:
Java:
package spieleverwaltung;
 
public class Spiel
{    
    public int altersfreigabe;
    public String name;
    public String genre;

    public Spiel() {
       this(0,null,null);
    }

    public Spiel(int altersfreigabe, String name, String genre) {
      this.altersfreigabe = altersfreigabe;
      this.name = name;
      this.genre = genre;
    }
    
     // Überschreib die toString-Methode, dann kannst du es direkt in System.out.println benutzen!
    @Override
    public String toString()
    {
       // Mal schnell mit + konkateniert. ToStringBuilder von Apache commons macht das besser!
        return getClass.getCanonicalName() + ":altersfreigabe=" + this.altersfreigabe + ",name=" + this.name + ",genre=" + this.genre;
    } 
    
}
public class SpieleDatenbank {

   private Spiel[] = spiele;

   public SpieleDatenbank(Spiel[] spiele) {
      this.spiele = spiele;
   }

   @Override
   public String toString() {
      // Kannst hier auch händisch iterieren und die Ausgabe basteln oder einfach eine Methode der JSE
      // benutzen.
      Arrays.deepToString(this.spiele);
   }
}
public class Programmstart 
{   
    public static void main(String[] args) 
    {
        Spiele a0 = new Spiele(18,"Doom", "Ego-Shooter");
        System.out.println(a0);

        Spiele a1 = new Spiele(16, "Skyrim", "RPG");
        System.out.println(a1);

         SpieleDatenbank db = new SpieleDatenbank(new Spiel[]{a0,a1});
         System.out.println(db);
    }
}
 
Zuletzt bearbeitet von einem Moderator:
bekomme ich aber nur die Adresse. Wenn mir das einer noch erklären kann wäre es super.
Hatte Deine neue Frage nicht gelesen. Um was anderes als die Speicheradresse eines Objekts zu sehen, musst Du die toString-Methode überschreiben (siehe der Code in meinem letzten Post).
 
Zuletzt bearbeitet von einem Moderator:
Boa, besten Dank. Das ist echt nett von dir. 🙂 Kann damit größtenteils was anfangen, this hatten wir auch in der Vorlesung. Ich schaue mir das nochmal ein wenig an und dann versuche ich das so ähnlich zu schreiben. Ein schönen Tag noch.
Gruß Michi 1989
 

Neue Themen


Zurück
Oben