Kapselung Elemente aus Objekt-Array ausgeben

arjoopy

Mitglied
Hallöchen, Java-Rookie am Werk, ich scheitere gerade daran, ein Element aus einem Objekt-Array ausgeben zu lassen. Statt der gewünschten Ausgabe "7, 14" bekomme ich "Point@6bc7c054" ausgegeben. Woran kann das liegen?

Konkret: Ich habe in einer Klasse "ObjArr" ein Objekt-Array, das aus Objekten der Klasse "Point" besteht, sowie eine Methode zum Abfragen eines Wertes aus dem Array (getValue):
Java:
public class ObjArr {
   
    Point[] anArray = new Point[3];
   
    public ObjArr() {
       
    anArray[0] = new Point(7,14);
    }
   
    public Point getValue() {
        return anArray[0];
    }

}

Die Klasse "Point" mit Konstruktor, Getter- und Setter-Methoden sieht folgendermaßen aus:
Java:
class Point {

private double x;
private double y;

public Point() {
}

public Point(double xIn, double yIn) {
x = xIn;
y = yIn;
}

public double getX() {
return x;
}

public void setX(double xIn) {
x = xIn;
}

public double getY() {
return y;
}

public void setY(double yIn) {
y = yIn;
}

}

Die Mainclass, aus der die getValue-Methode aufgerufen wird, ist folgende:
Java:
class mainclass {
   
    public static void main(String[] args) {
       
        ObjArr array1 = new ObjArr();
       
        System.out.println(array1.getValue());
       
    }

}

Vielen Dank im Voraus!
 
Wenn du System.out.println() aufrufst und ein Objekt übergibst wird implizit die toString() Methode des Objektes aufgerufen. Diese gibt, sofern nicht überschrieben, einen Wert zurück dem der Adresse des Objektes im Speicher ähnelt. Überschreib einfach die toString() Methode deiner Point Klasse und es funktioniert 🙂
(Wahlweise kannst du natürlich auch dein println abändern in bspw: System.out.println(array1.getValue().getY()); was aber bei weitem nicht so schön ist wenn du es dir öfter ausgeben lassen willst 🙂

Bspw:
Java:
public class Point
{
    ....
   
    @Override
    public String toString()
    {
          return "X: " + getX() + "   Y: " + getY();
    }

    ....
}

Gruß Robert
 
Da gibt er mir nen Fehler aus, "Syntax error, annotations are only available if source level is 1.5 or greater". Ich habs jetzt mal in der Mainclass mit:
Java:
double x;
x = anArray[0].getX();
System.out.println(x);
probiert, anstatt dem obig stehendem
Java:
System.out.println(array1.getValue());
führt leider auch zu ner Fehlermeldung "anArray cannot be resolved to a variable". Die Methode getValue(); ist ja auch nur ne Notlösung, eigentlich wäre es imho eleganter über den Getter in der Point-Klasse zuzugreifen. Bin dankbar für Ratschläge...
 
Ratschlag? Update dein JDK auf 1.8.
Was ist denn anArray? Welchen Typ hält dieses Array? Vermute mal Point?

Hast du das Array irgendwo deklariert a la "Point [] anArray = new Point [10];"?
Solltest du tun, denn er meckert, dass die Variable nicht aufgelöst bzw nicht gefunden werden kann. Hinweise aus der IDE können sehr hilfreich sein. 🙂 Falls Du keine benutzt, würde ich (persönliche Meinung) zu Netbeans oder Eclipse greifen.
 
anArray hält Objekte des Typs Point, richtig, und ich habe das Array deklariert (vgl. oberstes Codebeispiel im ersten Post). Ich nutze OpenJDK, bereits unter Eclipse.
 
"Syntax error, annotations are only available if source level is 1.5 or greater".
Mit welcher Java Version programmierst du denn??????? o:

Wenn das alles so stimmt wie du es in deinen Posts geschrieben hast und ich mich nicht verlesen habe dann existiert anArray in deiner Main-Klasse gar nicht.
Dann müsstest du anArray[iCode] erst noch via array1.getValue() initialisieren.
 
anArray hält Objekte des Typs Point, richtig, und ich habe das Array deklariert (vgl. oberstes Codebeispiel im ersten Post). Ich nutze OpenJDK, bereits unter Eclipse.
Stimmt, war nur etwas.. verwirrt.

Also normalerweise müsste das funktionieren. Auf welcher Distribution bist du denn unterwegs?
Normalerweise sollte selbst das openJDK auf 8 laufen. Schon seit geraumer Zeit ist 9 draußen.
 
9 ist noch nicht draussen. Nur Eaps. Nichts für Anfänger. Wahrscheinlich ist einfach der Language Level in eclipse nicht gut eingestellt
 

Neue Themen


Zurück
Oben