Auf einen Array innerhalb eines Objekts zugreifen

Mika34

Bekanntes Mitglied
Hallo,
Ich habe ein Problem. Ich möchte auf ein Array zugreifen, welches ich im Konstruktor einer Klasse definiert habe, jedoch bekomme ich es nicht gebacken diesen Array, welcher im Konstruktor definiert wird, in meiner Main aufzurufen. Ist es überhaupt möglich oder habe ich einen brutalen Denkfehler in meiner Implementierung?

So sieht der Konstruktor aus, in welchem ich das Array inventory initialisiere und mit Objekten der Klasse PlayStone befülle
Java:
public class PlayStoneInventory {
    private PlayStone [] inventory;
    
    public PlayStoneInventory() {
        inventory = new PlayStone[2];
        PlayStone playStone0 = new PlayStone(0, Colour.BLACK, Form.EDGY, Height.SMALL, Fullness.HOLLOW);
        PlayStone playStone1 = new PlayStone(1, Colour.BLACK, Form.EDGY, Height.SMALL, Fullness.SOLID);
        
        inventory[0] = playStone0;
        inventory[1] = playStone1;
    }
}
 
Ich nehme mal an, dass deine "Main" bzw. deine main-Methode in einer anderen Klasse liegt. Aktuell darf ja keine andere Klasse außer der `PlayStoneInventory` Klasse auf das Feld `inventory` zugreifen, da es als "private" deklariert ist.
Üblich ist hier einfach eine "Getter"-Methode (google das mal) hinzuzufügen, die du dann von deiner main-Methode aufrufen kannst.
 
Oh Gott, wie kann ich nur das übersehen ...
Vielen Dank!

Noch eine Frage, falls es so erlaubt ist. Ich will jetzt eine toString Methode implementieren, aber das wird sich hier schwer gestalten, muss ich die toString Methode hier implementieren oder in einer anderen Klasse oder ist es kompletter Bockmist
 
Weil wenn ich die Objekte einzeln ausgebe, dann passt es, möchte ich dies jedoch als Objekt, wie oben, ausgeben, dann zeigt er mir eben die Ausgabe PlayStone;@7852e922
was daraufhin deutet, dass ich eine toString benutzen soll, jedoch verstehe ich nicht so ganz wo ...
 
Jede Klasse kann die toString() Methode von java.lang.Object (von dem jede Klasse direkt oder indirekt erbt) überschreiben.
Z.B. so:
Java:
public class PlayStoneInventory {
    private PlayStone [] inventory;
   
    public PlayStoneInventory() {
        inventory = new PlayStone[2];
        PlayStone playStone0 = new PlayStone(0, Colour.BLACK, Form.EDGY, Height.SMALL, Fullness.HOLLOW);
        PlayStone playStone1 = new PlayStone(1, Colour.BLACK, Form.EDGY, Height.SMALL, Fullness.SOLID);
       
        inventory[0] = playStone0;
        inventory[1] = playStone1;
    }

    public String toString() {
        return java.util.Arrays.toString(inventory);
    }
}
 
was daraufhin deutet, dass ich eine toString benutzen soll, jedoch verstehe ich nicht so ganz wo

Welche toString() du überschreiben musst (oder auch mehrere), dass hängt ganz von deinem gewünschten Ergebnis ab:

Java:
class Fruit {
    private String name;
}

class Basket {
    private Fruit[] fruits;
}

Möchtest du z.B. das ein Basket seinen Inhalt ausgibt, dann brauchst du:
Java:
class Basket {
    private Fruit[] fruits;

    @Override  
    public String toString() {
        return java.util.Arrays.toString(fruits); // das ist ein Methode der Klasse Arrays.

        // Du kannst die Ausgabe natürlich auch frei gestalten, z.B. in einer Schleife
    }
}

Jetzt wirst du allerdings feststellen, dass die Ausgabe noch nicht so aussieht, wie du dir das vermutlich wünscht, weil für die Ausgabe von Fruit (in toString() von Basket) noch die von Object geerbte Standard toString() Methode verwendet wird.

Für eine Ausgabe des Namens jeder Frucht muss in diesem Fall auch noch zusätzlich toString() von Fruit überschrieben werden:

Java:
class Fruit {
    private String name;

    @Override
    public String toString() {
        return name;
    }
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben