Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen

bindankbar

Mitglied
Hallo, wenn man eine verkettete Liste hat, die Objekte hat, z. B. Autos.
Und jedes AUto hat z. B. ps-anzahl, kilometer,baujahr, name etc.

Wenn ich jetzt die Objekte in einer verketteten Liste habe, ist es ja so, dass ein Element meiner verketteten Liste ein ganzes Objekt hat. Ich soll jedoch von dem Objekt nur ein Attribut auslesen, z. B. die ps-anzahl und das bei jedem anderem Element in der Liste auch. Wie mache ich das? Es wird explizit gesagt, dass man durch die Liste gehen soll und dann das jeweilige Attribut immer raussuchen soll 🙁 Bin jetzt 3 Tage nur an der Aufgabe dran, habe einfach keine Zeile hinbekommen.

Gibt es dafür einen code? Wenn ich z. B. eine verkettete Liste habe, dass man sagt variable.data.attributwert oder so, wenn data die Referenz zu dem Objekt wäre 🙁? Bei Arrays ist das kein Problem, da mach ich ja einfahc arrayname.attributname, wenn Objekte im Array sind, aber bei Listen 🙁? WÜrde mich über jede Hifle freuen, danke euch
 
Beste Antwort
K
ICh hätte erstmal an einen Iterator gedacht.
Das war auch vollkommen richtig. Er wird erst einmal durch die Liste iterieren müssen. Vermutlich nicht mit dem Interface Iterator aber halt mit Methoden, die die (vermutlich eigene oder vorgegebene) LinkedList vorgibt. Ich hatte mich nur auf das "Wie komme ich an das Attribut?" konzentriert.

Bezüglich der Frage, wie Du das anwendest:

LinkedList ist immer in etwa so aufgebaut:

Du hast Nodes, Knoten, wie auch immer Du es nennen willst. Die Liste selbst zeigt auf einen solchen Knoten (head oder so).

Du kannst also erst einmal durch die ganze Liste durchgehen:
aktueller Knoten := head
So langer aktueller Knoten nicht null ist:
--> Mache etwas mit dem Knoten
--> aktueller Knoten :=...
Also nehmen wir einmal das Beispiel: Du hast die Klasse Auto und die hat ein Attribut Baujahr. Dann wird es ja einen Getter geben a.la. getBaujahr().

Wenn Du nun einen Node einer Verketteten Liste hast, und in diesem ist ein Auto gespeichert, dann kannst Du das evtl. per getValue() oder getAuto() bekommen. Wenn so eine Methode ein Auto zurück gibt, dann kannst Du darauf doch das getBaujahr() aufrufen, also etwas wie:
node.getValue().getBaujahr()
um das Baujahr auszulesen.
 
Okay, aber wie nutze ich das
den getter musst du selber schreiben.

Java:
public variablenTyp getVariablenName1(){
        return variablenName1;
    }
Und was heißt das genau? Wie gehe ich durch eine Liste und nutze das als kombination? Also wie kann ich durch meine verkettete Lsite gehen und mit dem "getter", habend as leider noch nicht kennen gelernt, also den Fachbegriff, auf mein Attribut zugreifen?
 
Dann sind die Attribute bestimmt public, d.h. Du kannst Da direkt drauf zugreifen, also einfach etwas wie
node.getValue().baujahr
Ich habe ein bisschen später als @kneitzel geantwortet.

Wenn deine Attribute public sind, sollte es ohne den getter gehen. wenn private dann musst du .getVariablenName() draufzugreifen.
Du darauf doch das getBaujahr() aufrufen, also etwas wie:
node.getValue().getBaujahr()


Ich habs selbst nicht ausprobiert. ICh hätte erstmal an einen Iterator gedacht. Aber Kneitzel ist (n!) erfahrener als ich, deshalb bevorzuge seinen Vorschlag.
 
den getter musst du selber schreiben.

Java:
public variablenTyp getVariablenName1(){
        return variablenName1;
    }
Das ist nicht zwingend notwendig. Der Zugriff kann auch so erfolgen.

Aber Du hast mit dem Hinweis natürlich vom Prinzip her Recht: Das ist aus Gründen der Kapselung stark anzuraten. Aber bei so vorgegebenem Code wird eine Diskussion natürlich nichts ändern.

Okay, aber wie nutze ich das
Ich habe Dir ein Beispiel genannt. Wenn Du ein Auto hast, dann kannst Du direkt auf das Attribut zugreifen.

Wir haben jetzt natürlich keine Ahnung, wie Deine LinkedList aussieht. Wenn der Node nicht speziell für Auto geschrieben wurde und keine Generics nutzt, dann wird so eine Methode node.getValue() vermutlich einfach ein Object zurück geben und kein Auto. Sollte dies der Fall sein, dann müsstest Du da noch einen Cast machen: Du musst dem Compiler sagen: Behandel das Object wie ein Auto: (Auto) muss davor. Also etwas wie:
Java:
Auto auto = (Auto) node.getValue;
// jetzt kannst du auf auto.baujahr zugreifen.

Das ist aber jetzt ein Raten - denn Du hast uns noch keinerlei Details zu der LinkedList verraten und auch nicht, wo genau Dein Problem jetzt ist.
 
Okay danke, aber wie wende ich das an 🙁 sorry bin da echt dumm 🙁.

Ich habe eien Variable help, die mein erstes Element wiederspiegelt meinen head und das erste Element ist wie erwähnt mein Objekt.

Mache ich dann help.klassenname.attributname?

(Sorry für die echt dumme frage, aber ich habe nicht mal ganz kapiert was ein node ist, bin echt ein dummer Anfänger
 
Das ist nicht zwingend notwendig. Der Zugriff kann auch so erfolgen.

Aber Du hast mit dem Hinweis natürlich vom Prinzip her Recht: Das ist aus Gründen der Kapselung stark anzuraten. Aber bei so vorgegebenem Code wird eine Diskussion natürlich nichts ändern.


Ich habe Dir ein Beispiel genannt. Wenn Du ein Auto hast, dann kannst Du direkt auf das Attribut zugreifen.

Wir haben jetzt natürlich keine Ahnung, wie Deine LinkedList aussieht. Wenn der Node nicht speziell für Auto geschrieben wurde und keine Generics nutzt, dann wird so eine Methode node.getValue() vermutlich einfach ein Object zurück geben und kein Auto. Sollte dies der Fall sein, dann müsstest Du da noch einen Cast machen: Du musst dem Compiler sagen: Behandel das Object wie ein Auto: (Auto) muss davor. Also etwas wie:
Java:
Auto auto = (Auto) node.getValue;
// jetzt kannst du auf auto.baujahr zugreifen.

Das ist aber jetzt ein Raten - denn Du hast uns noch keinerlei Details zu der LinkedList verraten und auch nicht, wo genau Dein Problem jetzt ist.
Aso. Also ich habe eine Klasse, namens brabus, mit 5 Attributen die public sind.

Dann habe ich eine Liste wo eine Referenz zu der Klasse gebaut wird. Die referenz heißt data. Und mit next gehe ich weiter in meiner Liste. Mein head, heißt als variable auch head und mein letztes Element in der Liste heißt z. Und das Attribut, welches ich von der Klasse brabus immer rausfischen soll heißt mimi und ist ein public int.

Also gegeben:
-Klasse namens brabus mit 5 Attributen die public sind, ein Attribut heißt mimi und ist int
- Liste mit referenz zur Klasse brabus mit der variable data
- head namens head
- letztes Element heißt z
-
- ich soll mimi von jedem Objekt rausfischen, welches meine Liste hat.
 
(Sorry für die echt dumme frage, aber ich habe nicht mal ganz kapiert was ein node ist, bin echt ein dummer Anfänger
Alles EZ, das ist normal, dass man am Anfang und auch später ein bisschen lost ist.

Aber wie @kneitzel und ich schon sagten. Ohne Code ist es schwer eine Idee von deinem konkreten Problem zu bekommen.
Deswegen, post erstmal, was du schon hast, dir reisst keiner den Kopf ab
 
ICh hätte erstmal an einen Iterator gedacht.
Das war auch vollkommen richtig. Er wird erst einmal durch die Liste iterieren müssen. Vermutlich nicht mit dem Interface Iterator aber halt mit Methoden, die die (vermutlich eigene oder vorgegebene) LinkedList vorgibt. Ich hatte mich nur auf das "Wie komme ich an das Attribut?" konzentriert.

Bezüglich der Frage, wie Du das anwendest:

LinkedList ist immer in etwa so aufgebaut:

Du hast Nodes, Knoten, wie auch immer Du es nennen willst. Die Liste selbst zeigt auf einen solchen Knoten (head oder so).

Du kannst also erst einmal durch die ganze Liste durchgehen:
aktueller Knoten := head
So langer aktueller Knoten nicht null ist:
--> Mache etwas mit dem Knoten
--> aktueller Knoten := nachfolgender Knoten

Das ist also das Typische Vorgehen. Du fängst am Anfang an und gehst so die ganze Liste durch.

Der Knoten speichert nun einen Wert. Hier fehlen und die genauen Vorgaben. Du hast eine Referenz, die "data" heisst: Ist die vom Typ "brabus"?
Wenn dir vom Typ brabus ist, dann kannst Du, wenn "help" eine Variable vom Knoten ist, einfach sagen: help.data.gewuenschtesAttribut um auf das gewünschte Attribut zuzugreifen. Oder um es besser lesbar für Dich zu machen: Aufgeteilt auf zweiGefehle:
brabus element = help.data;
element.gewuenschteAttribut
 
Beste Antwort
Das war auch vollkommen richtig. Er wird erst einmal durch die Liste iterieren müssen. Vermutlich nicht mit dem Interface Iterator aber halt mit Methoden, die die (vermutlich eigene oder vorgegebene) LinkedList vorgibt. Ich hatte mich nur auf das "Wie komme ich an das Attribut?" konzentriert.

Bezüglich der Frage, wie Du das anwendest:

LinkedList ist immer in etwa so aufgebaut:

Du hast Nodes, Knoten, wie auch immer Du es nennen willst. Die Liste selbst zeigt auf einen solchen Knoten (head oder so).

Du kannst also erst einmal durch die ganze Liste durchgehen:
aktueller Knoten := head
So langer aktueller Knoten nicht null ist:
--> Mache etwas mit dem Knoten
--> aktueller Knoten := nachfolgender Knoten

Das ist also das Typische Vorgehen. Du fängst am Anfang an und gehst so die ganze Liste durch.

Der Knoten speichert nun einen Wert. Hier fehlen und die genauen Vorgaben. Du hast eine Referenz, die "data" heisst: Ist die vom Typ "brabus"?
Wenn dir vom Typ brabus ist, dann kannst Du, wenn "help" eine Variable vom Knoten ist, einfach sagen: help.data.gewuenschtesAttribut um auf das gewünschte Attribut zuzugreifen. Oder um es besser lesbar für Dich zu machen: Aufgeteilt auf zweiGefehle:
brabus element = help.data;
element.gewuenschteAttribut
OMG danke dir 🙂 hat geklappt!
 

Neue Themen


Zurück
Oben