Informatik Frage?
Programmiersprache : Java
Thema: Datenstruktur Queue, hier mit Knoten
Also auf der Website https://drdanielappel.de/informatik/mein-kleines-java-tutorium/java-im-abi-nrw/datenstrukturen/queues-ganz-allgemein/ bin ich jetzt zu diesem Bild von Code gekommen:
In Z. 6 soll jetzt der erste Knoten auf die Methode schreibeInfos() des Autoobjekts zugreifen, das in ihm auch abgelegt wurde. Dazu wird "gecastet", was mir btw erstmal ein völlig neuer Begriff ist. Wie auch immer.
Es wird ein zweiter Knoten als Nachfolger des ersten Knotens erzeugt, und in diesem zweiten Knoten wird ein weiteres Auto Objekt abgelegt, nennen wir es mal das "blaue Auto". Jetzt soll auf die Methode schreibeInfos() des "blauen" Autos zugegriffen werden. Dazu gibt es auf der Website Dieses Bild:
Z. 7 - 9 verstehe ich überhaupt nicht. Ich dachte, das geht so:
Aber warum nicht? Danke (und hilfreich😀) schonmal für Antworten
Verbesserrung: Bei meinem Code:
.- macht aber irgendwie trotzdem keinen unterschied🤨
1 Antwort
Dazu wird "gecastet", was mir btw erstmal ein völlig neuer Begriff ist. Wie auch immer.
Falls du dich wirklich noch nicht mit Typecasting auseinandergesetzt haben solltest, würde ich dir raten, das erst einmal vorzuziehen. Kurz erklärt geht es darum, einen Wert zu einen anderen Typ zu konvertieren. Man kann hierbei zwischen impliziten und expliziten Casts unterscheiden.
Ein Beispiel für einen impliziten Typecast:
double number = 2;
Auf der rechten Seite steht ein Integer-Literal, welches automatisch in den double konvertiert wird. Das klappt problemlos, da der Wertebereich von double den Wertebereich des Integers abdeckt.
Zwei Beispiele für einen expliziten Typecast:
String numericRepresentation = Integer.toString(5);
Object car = new Car();
Car realCar = (Car) car;
Diese Konversionen könnte der Computer nicht selbstständig übernehmen, da hierbei auch das Risiko eines Datenverlusts besteht. Die Operationen müssen explizit vorgegeben werden.
Weiteres kannst du unter anderem hier nachlesen.
In deinem Fall wird getContent sicherlich ebenso ein Object zurückgeben. Da dieser Typ keine Methode schreibeInfos kennt, muss erst einmal eine Typumwandlung vorgenommen werden.
Zu deinem Knotenproblem: Du musst beachten, dass deine Datenstruktur aus Knoten besteht, wobei jeder Knoten irgendeinen Inhalt hat.
Einmal visuell dargestellt:
Node(5) ---> Node(Car()) ---> Node('a') ---> ...
Um nun den Inhalt des zweiten Knotens zu erhalten, musst du erst zum zweiten Knoten navigieren:
secondNode = firstNode.getNext();
Und danach den Inhalt aus dem Knoten herausholen. Dieser kann im Anschluss zu seinem Originalobjekt konvertiert werden:
content = secondNode.getContent();
car = (Car) content;
car.writeInfo();
Man könnte diesen Prozess zwar auch in einer Zeile formulieren:
((Car) firstNode.getNext().getContent()).writeInfo();
doch wird so ein Ausdruck dadurch schnell schwerer lesbar, was wiederum zu Fehlern führt. Zum Beispiel bei der Klammersetzung.
Wenn du nun einmal auf deinen Code schaust (und auch auf die Fehlermeldung), solltest du merken, dass sich gerade so ein Fehler eingeschlichen hat. Du versuchst, den Knoten zu konvertieren, statt seinen Inhalt.