Erste Schritte Java ein Array Feld[index] zurueckgeben?

Terry12

Aktives Mitglied
hi,

ich hab ein Object Array , hier 2 Methoden daraus:

Java:
    public Object getKeyValue()
    {
        return keyValue;
    }
    
    public Object getKeyValueIndex(int index)
    {   
        assert (index >=0 && index<=size):"Index muss >=0 sein und max. so groß wie das Array sein!";
        Object o1 = array[index].getKeyValue();
        return o1;
    }

warum sagt er mir dauernd cannot find symbol - method getKeyValue() ? Ich arbeite mit BlueJ
 
[STRIKE]Object[/STRIKE] Array[] hat keine Methode names
Java:
getKeyValue

hö? Ich hab doch 2 zeilen weiter oben die Methode public Object getKeyValue()
oder bin ich zu blöd?

Dein getKeyValue hat nichts mit der (uns unbekannten) Klasse von Array zu tun.
(ist ja der Sinn in Java, dass der selbe Methodenname für unterschiedliche Klassen definiert werden kann.)

Für die Klasse array[] ist er offensichtlich nicht definiert.
 
Zuletzt bearbeitet:
aber wie soll ich denn sonst mittels eines index auf ein Array zugreifen und den dortigen KeyWErt zurueckgeben?
hier mein java code :
Java:
    /**
     * Konstruktor für Objekte der Klasse Array
     */
    public ObjectArray(int maxSize)      
    {
        assert (maxSize >0 ): "Array Groesse darf nicht <=0 sein!";
        array = new Object[maxSize];  
        this.maxSize = maxSize;
        this.size = size;        
    }

    /**
     * Fuegt ein Objekt in das Array ein.
     * 
     * @param       Object keyValue
     * @return      
     */
    public void insert(Object keyValue)
    {
        assert (keyValue!=null) :"Objekt darf nicht leer sein!";
        array[size++] = keyValue;        
    }
    
    public int getSize()
    {
        return size;
    }
    
    public int maxSize()
    {
        return maxSize;
    }
    
    public Object getKeyValue()
    {
        return keyValue;
    }
    
    public Object getKeyValueIndex(int index)
    {   
        assert (index >=0 && index <=size):"Index muss >=0 sein und max. so groß wie das Array sein!";
        return array[index].getKeyValue();        
    }
    
    /**
     * Methode um zu uebergebenem Index das entsprechende Objekt zurueckzugeben.
     * 
     * @param       int index (Index)
     * @return      Object (Rueckgabe ist ein Objekt)
     */
    public Object getIndexObject(int index)
    {                
        assert (index >= 0 && index < array.length) : "Index muss >= 0 sein und im Array-Bereich liegen!";
        return  array[index];           
    }
    
    
    /**
     * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
     * 
     * @param  y    (Beschreibung des Parameters)
     * @return      (Beschreibung des Rückgabewertes)
     */
    public Object getKeyValue(int index)
    {
        assert (index >= 0 && index < array.length) : "Index muss >= 0 sein und im Array-Bereich liegen!";
        
        return array[index];
    }
    
    public String toString()
    {
       StringBuilder sb = new StringBuilder();   
       for (int i = 0; i< size; i++) {
       sb.append("Objekt Nr.: " +i+ "\tKey-Wert: " +array[i]);       
       }      
       return sb.toString();
    } 


}
 
array[index] ist irgendwas, was genau kann man ohne den Typ des Arrays aber nicht wissen,
wenn es ein Object[] ist, dann kommt Object zurück, egal welches konkrete Objekt es ist, dann muss man erst casten

vergleichbar mit
Java:
Object o = "";
o.substring(...); // String-Methode zunächst nicht da
 
hö? Ich hab doch 2 zeilen weiter oben die Methode public Object getKeyValue()
oder bin ich zu blöd?
Ja, du hast in Deiner eigenen Klasse die Methode definiert, versuchst sie aber auf
Code:
array[index]
aufzurufen. Da Du Dein Array so definiert hast, dass es
Code:
Object
enthält, bekommst Du auch
Code:
Object
heraus und
Code:
Object
hat diese Methode nicht.
 
wie man nun sieht enthält das Array die eingefügten Werte,
es sollte also einfach array[index] zurückgegeben werden,

die Methode getKeyValue() kann weg, das Instanzattribut keyValue hat keine Funktion


-------

es gibt sogar schon eine fertige korrekte Methode getKeyValue(int index) weiter unten?!
 
Java:
MeineKlasse[] array;
Oder nimm einfach Map (HashMap/LinkedHashMap). Sieht für mich nämlich so aus, als würdest Du das nachbauen wollen.
 
Es ist auch nicht klar, was du mit "KeyValue" meinst:

array ist selbst der "Wert" der an der Stelle "i" steht!

Aber:
  • ob das vielleicht schon dein "KeyValue" ist, oder
  • ob das erst ein Objekt ist, das eine Eigenschaft keyValue hat, oder
  • ob du einen von diesem Objekt abhängigen Wert erst noch ermitteln musst
hängt von deiner Klasse ab.
 
wie man nun sieht enthält das Array die eingefügten Werte,
es sollte also einfach array[index] zurückgegeben werden,

die Methode getKeyValue() kann weg, das Instanzattribut keyValue hat keine Funktion

-------

es gibt sogar schon eine fertige korrekte Methode getKeyValue(int index) weiter unten?!

ok danke aber kann es auch sein, dass wenn man zB ein abstrakten Datentyp, z.B Auto in das array packt und dann array[0] zurueckgibt, bekommt man doch nicht die Werte des Autos zurueck, sondern Klassenname@Speicheradressse , was macht man dann?
die untere Methode wollte ich ja eben verbessern, aus oben genannten Gründen^^
 
ok danke aber kann es auch sein, dass wenn man zB ein abstrakten Datentyp, z.B Auto in das array packt und dann array[0] zurueckgibt, bekommt man doch nicht die Werte des Autos zurueck, sondern Klassenname@Speicheradressse , was macht man dann?
die untere Methode wollte ich ja eben verbessern, aus oben genannten Gründen^^

Wenn deine Klasse Auto das Merkmal ps enthält, und wie hier in einer Liste geparkt sind:
Dann ist
Code:
autoListe[i]
selbst ein
Code:
Auto
Java:
autoListe[i].getPS();

Edit:
Ich gehe davon aus dass "sauber" mit Getter gearbeitet wird.
Sonst gehts auch "schlampig", aber das sollte nicht verwendet werden.
Java:
autoListe[i].ps;
class Auto{
private double ps;
private String marke;
...
public double getPS() {return this.ps};
}
 
Zuletzt bearbeitet:
bekommt man doch nicht die Werte des Autos zurueck, sondern Klassenname@Speicheradressse , was macht man dann?
die untere Methode wollte ich ja eben verbessern, aus oben genannten Gründen
Ah ok, Du willst nur die Darstellung in System.out.println verbessern? Dann überschreib in Deinen Klassen die Methode toString(), ungefähr so:.
Java:
public class MeineKlasse {
  private String einFeld;

  @Override
  public String toString() {
    return "einFeld="+this.einFeld;
  }

}
Bei weiteren Feldern entsprechend. Ist wegen des
Code:
+
nicht besonders schön. Aber für den Anfang reicht es. Richtig gut machste es mit
Code:
StringBuilder
.

Meinen letzten Post kannste ignorieren. Da hab ich mich von den Methodennamen auf die falsche Fährte locken lassen.
 
Nein, du bekommst schon das konkrete Objekt zurück, nur hast du darauf (bei dir) die Object Sicht. Das heißt du kannst auf alle Methoden und öffentlichen Variablen von Object zugreifen.
Wenn du das Objekt auf einen speziellieren Typ castest kannst du auch auf dessen Methoden zugreifen:
Java:
Object s = "";
s.substring(...); // geht nicht
String s1 = (String) s;
s1.substring(...); // geht
 
hm ok
ich hab in das array ein int , ein string und ein Professor Datentyp mit Name, Gehalt und VOrlesung gepackt und er gibt mir tatsächlich alles korrekt , sogar mit den einzelnen Professorwerten zurueck.
Liegt das daran dass ich in der Professor Klasse eine .toString Methode definiert habe die eben diese Werte zurueckgibt, und er im Objekt array - wenn er den Professor zurueckgibt - automatisch die toString() Methode von Professor aufruft?
oder wie kommt es dass nicht sowas zurueckgegeben wird wie Professor@93328939f ???
 
ich hab in das array ein int , ein string und ein Professor Datentyp mit Name, Gehalt und VOrlesung gepackt und er gibt mir tatsächlich alles korrekt , sogar mit den einzelnen Professorwerten zurueck.
Du hast das hoffentlich nicht in ein Array gepackt, sondern in eine Klasse formuliert.
Und mehrere dieser Klassen kannst du dann in ein Array packen.

Und von jedem Objekt gibts genau 1(!) methode toString().
Entweder eine von dir definierte (@override), oder die letzte darüber liegende.
(Die gibt halt für Arrays oder Objekte nur den Speicherort zurück)

Welche (von welcher Klasse) rufst du auf?
 
Du hast das hoffentlich nicht in ein Array gepackt, sondern in eine Klasse formuliert.
Und mehrere dieser Klassen kannst du dann in ein Array packen.

Und von jedem Objekt gibts genau 1(!) methode toString().
Entweder eine von dir definierte (@override), oder die letzte darüber liegende.
(Die gibt halt für Arrays oder Objekte nur den Speicherort zurück)

Welche (von welcher Klasse) rufst du auf?

ja ich hab ein eigene Professor Klasse gemacht, und da die .toString() methode überschrieben, die gibt mir halt die Werte zurueck.
 

Zurück
Oben