Arrays?
hallo :)
nehmen wir mal an man hat ein Beispielarray : int array1[] = new int[] {1,2,3,4,5,6,7,8}
dieses BeispielArray wird dann später in einem JUnit Test erstellt und zur Überprüfung der unten stehenden Methode genutzt.
da ich jetzt alle Zahlen an geraden Stellen des Arrays zusammenzählen will ( also 1, 3, 5, 7 ... ein Array beginnt ja immer an Stelle 0 ) , habe ich folgendes programmiert:
public static int funktionEins( int [] array ){
int summe = 0;
for ( int i = 0; i < array.length; i++ ){
if ( array[i]%2 == 0 ){
summe = summe + array[i];
}
}
return summe;
}
Jetzt hat sich ja da ein Fehler eingeschlichen, weil es mir hier ja alle geraden Zahlen zusammenzählt, egal an welcher Stelle die im Array stehen.
Ich weiß, dass man das mit einem Index machen muss... ich hab aber leider keine Idee wie ich das jetzt berichtigen kann...
Danke für eure Hilfe :)
3 Antworten
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Lass doch die If-Abfrage und Verwende stattdessen in der For-Schleife eine Schrittweite von zwei statt eins.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Da müsste ich dir die Lösung verraten. Lass uns das interaktiv gestalten:
Erklär mir, wie eine For-Schleife funktioniert.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
wiederholt sich so lange bis die grenze erreicht is die an der zweiten stelle steht in der klammer... i++ steht dafür dass es sich um eins erhöht
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Genau! Wenn du jetzt, wie hier, aber nur jedes zweite Element haben möchtest, wie machst du das, wie muss du die Parameter der For-Schleife verändern?
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
müsste ich dann i++ umändern zu i = i+2 ? damit es immer um zwei hochgeht ?
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Richtig!
Und dann brauchst du auch die If-Abfrage nicht mehr, denn dann erwichst du ganz automatisch nur jedes zweite Element.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
mhh irgendwie klappt der test noch nicht ganz... aber du hast mir auf jeden fall weitergeholfen danke :))
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Momentan prüfst du, ob die Zahl, die im Array an Stelle i ist (array[i]) gerade ist (%2==0). Das ist natürlich nicht, was gefragt war. Was du brauchst:
Wenn der Index gerade ist, dann addiere.
if (i%2==0) summe = summe + array[i];
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ohne dir jetzt den Fehler vorzusagen, wie es die anderen gemacht haben, hätte ich dir stattdessen den Hinweis gegeben, dir mal Daten anzeigen zu lassen, die während des "Summieren" auftreten.
Dann wäre dir der Fehler wohl selbst aufgefallen:
public class ArrayTest {
public static int funktionEins( int [] array ){
int summe = 0;
for ( int i = 0; i < array.length; i++ ){
if ( array[i]%2 == 0 ){
System.out.println("Index: " + i + " Summe: " + summe + " Arrayvalue: " + array[i]);
summe = summe + array[i];
}
}
return summe;
}
public static void main(String args[]) {
int array1[] = new int[] {1,2,3,4,5,6,7,8};
funktionEins(array1);
}
}
kannst du mir kurz auf die Sprünge helfen wie ich das machen kann ?