[Anfänger-Hilfe] Frage zu Rückgabewerten in Schleifen

12/13/2018 17:11 sk8land​#16
Code:
i < this.shapes.length
ist schon richtig.

instanceof ist hier allerdings nicht notwendig und sollte generell möglichst selten benutzt werden.
12/13/2018 17:42 Kizuaki#17
Quote:
Originally Posted by Zunft View Post
Die PDF existiert nicht.
Komisch .. zum Zeitpunkt des Postens ging der Link noch :confused:

Aktueller Link wurde nun jedoch editiert.


Quote:
Originally Posted by Zunft View Post
Wo genau ist das Problem? Eine Lösung hast du ja scheinbar schon.

Du hast ein Interface, welches die Struktur vorschreibt. Die Klassen Rectangle und Circle implementieren dieses Interface. Dadurch kannst du ein Array mit Bezug auf das Interface erstellen und darin sowohl Rectangle als auch Circle (=jede Geometric implementierende Klasse) speichern.



Ohje, anscheinend hatte ich gar kein Problem, ich war wohl nur so extrem übermüdet, dass ich den Iterator "[i]" nach this.shapes vergessen hatte...

Edit: Nee, hatte wohl doch 'ne Lücke in meinem Verständnis. Dachte, dass man nach der For-Schleife sozusagen bereits beim gewünschten Objekt ist und diesen dann normal mit this.shapes aufrufen kann .. (hatte den selben Fehler nämlich soeben wiederholt gemacht ... lol) :facepalm:

Danke!

Quote:
Originally Posted by Zunft View Post

P.S.: Lösche doch nicht deinen Startpost. Wenn jetzt irgendjemand ein ähnliches Problem hat, kann er mit dem Thema hier nichts mehr anfangen und muss ein neues erstellen.
Da war ich wohl etwas sehr egozentrisch unterwegs, werde ich mir für die Zukunft merken!


Quote:
Originally Posted by sk8land​ View Post
instanceof ist hier allerdings nicht notwendig und sollte generell möglichst selten benutzt werden.
Mein Intention war es zu prüfen, ob das sich im Array befindliche Objekt nun zu Circles oder zu Rectangle gehört, um die entsprechende Funktion aufzurufen ....

Mir ist erst gerade aufgefallen, dass solch eine Unterscheidung absolut keinen Sinn macht, weil der Compiler je nach Objekt im Array dann selbstständig entscheidet, welche Methode ädaquat sein wird .. oder? :confused:


@ Zunft & sk8land​ Danke für eure Hilfe :handsdown:

Neue Frage:

Bei der Aufgabe 5 müsste ich nun die Breite und Länge der im Array vorhandenen Objekte verändern, leider kann ich auf die Getter- und Setter-Methoden der jeweiligen Klassen nicht zugreifen.

(this.shapes[i].getHeight() funktioniert logischerweise nicht, da diese Funktion ja nicht im Interface vorhanden ist.)

Meine Idee war, dass ich mit instanceof prüfe um welches Objekt es sich handelt und dementsprechend ein komplett neues Objekt erstelle und mit diesem dann die Methoden aufrufe und das Array[i] dann mit diesem neuen Objekt überschreibe.

... funktioniert jedoch nicht, da man einem Circle/Rectangle-Objekt kein Geometric "zuweisen" kann :D



Quote:
Originally Posted by sk8land​ View Post
Genau, allerdings entscheidet sich das erst zur Laufzeit. Der Compiler weiß noch nicht, welche Klassen die Array-Elemente haben. Dass man das so grob versteht soll wahrscheinlich der Sinn der Übung sein.
Das ist sehr wahrscheinlich, denn soeben bin ich diesem Problem erneut begegnet. :D



1d sollte es natürlich heißen.
12/13/2018 18:15 sk8land​#18
Quote:
Originally Posted by Kizuaki View Post
Mir ist erst gerade aufgefallen, dass solch eine Unterscheidung absolut keinen Sinn macht, weil der Compiler je nach Objekt im Array dann selbstständig entscheidet, welche Methode ädaquat sein wird .. oder? :confused:
Genau, allerdings entscheidet sich das erst zur Laufzeit. Der Compiler weiß noch nicht, welche Klassen die Array-Elemente haben. Dass man das so grob versteht soll wahrscheinlich der Sinn der Übung sein.
12/14/2018 11:21 Zunft#19
Quote:
Originally Posted by sk8land​ View Post
Code:
i < this.shapes.length
ist schon richtig.
Bin ich grad aufm Holzweg? Nehmen wir mal an das Array hat einen Eintrag also ist length=0. Dann würde die Schleife direkt abgebrochen. Oder ich bin grad ziemlich dumm.

Ja ich bin dumm. :rtfm:

Quote:
Originally Posted by Kizuaki View Post
Das ist sehr wahrscheinlich, denn soeben bin ich diesem Problem erneut begegnet. :D



1d sollte es natürlich heißen.
Du musst hier casten. Also
Code:
Circle circle = (Circle) this.shapes[i]
12/14/2018 12:09 Kizuaki#20
Quote:
Originally Posted by Zunft View Post


Du musst hier casten. Also
Code:
Circle circle = (Circle) this.shapes[i]
Das habe ich noch nie gesehen, was genau bewirkt das "(Circle)"? :confused::confused:

Bzw. ist es offensichtlich was es bewirkt, aber worum genau handelt es sich? :eek:
12/14/2018 13:36 Zunft#21
Quote:
Originally Posted by Kizuaki View Post
Das habe ich noch nie gesehen, was genau bewirkt das "(Circle)"? :confused::confused:

Bzw. ist es offensichtlich was es bewirkt, aber worum genau handelt es sich? :eek:
Das ist eine Typanpassung (engl. typecast) bzw. genauer gesagt eine explizite Typanpassung.
Finde ich schwierig zu erklären ist aber denke ich offensichtlich, was da passiert.
12/14/2018 15:41 Mikesch01#22
Lektüre:
[Only registered and activated users can see links. Click Here To Register...] (Typecast)
[Only registered and activated users can see links. Click Here To Register...] (Polymorphie)