Wie kann man einen Java Array automatisch hochzählen lassen?

Java Programm - (Computer, programmieren, Java)

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.

Woher ich das weiß:Berufserfahrung – Berufserfahrung
ceevee  13.01.2016, 11:31

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...

2
JavaTheHutt  13.01.2016, 21:18

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".

3

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

TheQ86  13.01.2016, 10:52

Kein Unterschied zur foreach Variante, in der in vogel2 auch immer die aktuelle Iteration enthalten ist.

0
GoimgarDE  13.01.2016, 21:46

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.

0

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");

}

}


TheQ86  13.01.2016, 10:53

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

2
karinili  13.01.2016, 11:05
@TheQ86

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.

0
ceevee  13.01.2016, 11:22
@karinili

Und was braucht der Fragesteller genau? Richtig, den Index um zu überprüfen, ob das Element ein Huhn ist oder nicht.

Falsch, der Fragesteller braucht das konkrete Element selbst und nicht den Index. 

2
GoimgarDE  13.01.2016, 21:52
@karinili

"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.

0