Wie lasse ich bei Java die Anzahl der geraden Zahlen in einem beliebig großen Array ausgeben?
Ein Array und so Zeug hab ich schon und brauche nun eine Methode um die Anzahl der geraden Zahlen auszugeben. Mein Ansatz sieht bisher wie folgt aus:
int istgerade = 0; int i = 0; while (i <= array.length){ if (array[i]%2 == 0){ istgerade++; i++; } }
System.out.print(istgerade) ;
Die Idee dahinter ist, dass solange i (also die Position im Array) kleiner oder gleich der Länge des Arrays ist (hab es auch schon nur mir "kleiner als" versucht) wird überprüft ob die Zahl im Array an der Stelle i gerade ist (%2 == 0 muss ja gerade sein), wenn das nun der Fall ist soll der "istgerade Zähler" hochspringen...was mache ich falsch?
3 Antworten
Für soetwas nimm lieber eine for-Schleife. While-Schleifen können "launisch" sein: Solange die While-Bedingung erfüllt wird, laufen sie halt im Zeifel unendlich weiter, was zu Abstürzen führt, weil der Speicher vollläuft.
Mit einer for-Schleife sollte das dann so aussehen:
int [] meinArray = {1,2,3,4,5}; int istGerade = 0; for(int i=0; i<meinArray.length; i++){ if (meinArray[i]%2 == 0){
istGerade++;
} } System.out.print(istGerade);
Jop, daran wird's liegen.
Als Beispiel: Dein Array besteht aus den Zahlen 1-10. Der index geht aber nicht von 1-10 sondern von 0-9. Das heißt, bei "kleiner gleich 10" (<=10) versucht er deinArray[10] abzurufen. Dieser Index existiert aber nicht und es kommt zu einem Fehler.
Du zählst den Index nur hoch wenn es eine Gerade Zahl ist. Dadurch läuft die Schleife unendlich sobald ein ungerades Element kommt.
Mach das i++ aus dem if raus in die Schleife und es müsste passen.
Ich möchte an dieser Stelle erwähnen, dass ich die Verwendung von Multiplikation, Division und Modulo bei Rechnungen mit Zweierpotenzen für unangemessen halte.
In Java mag das nicht unbedingt einen großen Unterschied machen und ein schlauer Compiler wird es eh' ersetzen, aber wenn man an systemnahe Programmierung denkt, dann sind solche Operationen ein Albtraum.
Besser wäre es mit bitweisem UND zu arbeiten.
Also ich hatte es eben schonmal mit einer For Schleife. Da hat es nicht funktioniert, kann es daran liegen, dass ich for(int i=0;i<= <---- verwendet habe statt nur i