Wie kann man einen Java Array automatisch hochzählen lassen?
Hey Leute :)
Ich bin mich auf die nächste java Prüfung am Vorbereiten, bei welcher ich Folgenden test durchführen muss:
Wenn das Tier im Array ein Huhn ist, soll es Flattern. (Siehe Anhang)
Wie schaffe ich es nun, das es mir jeden Array automatisch testet?

3 Antworten
Diese If-Abfragen sind sinnlos. Wenn du in Java programmierst solltest du objektorientiert denken.
* Vogel als Interface oder abstrakte Klasse implementieren mit der Methode fliegen()
* In Huhn und Ente diese Methoden überschreiben
Dann verhält sich jedes Objekt auch ohne Abfrage genau so, wie es soll.
Ich würde die foreach Variante beibehalten, mit manuellem Zähler arbeiten bringt nicht wirklich was.
Allgemeine Anmerkung zur Frage: Alle Kindklassen von "Huhn" sind auch (implizit) Hühner. Deswegen solltest du nicht den Typ mit der Methode "getClass()" überprüfen, sondern mit "instanceof".
Entweder so oder mit dem Strategie-Pattern die Flugfähigkeit rauskapseln.
DH, das ist mMn. die einzige richtige Antwort hier. Bei einigen Antworten hier hab ich den Eindruck, dass sie nicht wissen, was eine foreach-Schleife ist...
Du musst eine for-Schleife statt der foreach benutzen :)
for (int i = 0; i <voegel.length; i++) {
if (voegel[i].getclass().....) //hier kommt deine prüfung mit dem rest
}
die schleife zählt jedes mal i um eins hoch und innen drin greifst du (wie du sehen kannst) mit voegel[i] dann immer auf das nächste element zu
Kein Unterschied zur foreach Variante, in der in vogel2 auch immer die aktuelle Iteration enthalten ist.
Mit ner do-while ist das sehr umständlich und auch die foreach ist unnütz.
Benütz eine for-schleife und nimm die Vergleichszahl der Schleife als Index für das Array.
Sprich:
for (int i = 0; i < voegel.length; i++) {
if (voegel[i].getClass() == Huhn) {
System.out.println("Ich bin ein Huhn");
}
}
Warum sollte die foreach unnütz sein? Kein Unterschied zur normalen for-schleife. Die ist nur dann sinnvoller, wenn du innerhalb der schleife unbedingt den index brauchst
Und was braucht der Fragesteller genau? Richtig, den Index um zu überprüfen, ob das Element ein Huhn ist oder nicht.
Klar, es gibt auch noch andere Möglichkeiten, wie dynamische Bindung und eine foreach-Schleife, aber das ist nicht die (direkte) Frage. Zumal ich bezweifle, dass es sinnvoll ist mit dynamischer Datenbindung zu arbeiten, wenn man nicht einmal weiß, wie man die Positionen eines Arrays mittels Schleife "hochzählen" könnte.
"Und was braucht der Fragesteller genau? Richtig, den Index um zu überprüfen, ob das Element ein Huhn ist oder nicht." MÖP und wider falsch. Der TE würde den Index nur zu einem EINZIGEN Zweck benutzen: Mit Hilfe des Index auf das aktuell zu Prüfende Objekt zugreifen. Du siehst doch an deinem eigenen code das i nur für einen zugriff voegel[i] benötigt wird. Der Te kann an dieser stelle direkt mit voegel2 direkt auf das aktuelle Objekt zugreifen.
Und mit "dynamischer Bindung" hat die Verwendung der for schleife mit oder ohne "each" mal gar nichts zu tun. Welcher konkreten Typ zur Laufzeit in dem Array Steckt hängt davon nicht ab.
bitte schau dir das for each construct an. Die Schleife des Op ist schon richtig. Auch ist das for each construct in seiner Intention noch leichter für andere Entwickler einzuordnen.