2016-03-29 6 views
1

Ich gehe ein Beispiel für Code Wars durch. Im Wesentlichen nehmen Sie eine Zahl, finden die Vielfachen von 3 und 5 und addieren diese zusammen. Angenommen, die Zahl ist 10, dann haben wir 3,5,6,9.Arraylist OutOfBoundsException: Index: 5, Größe: 4

Ich bin an dem Punkt, wo ich die Vielfachen zusammenfügen möchte (die foreach-Schleife am unteren Rand), aber ich bekomme immer eine OutOfBoundsException. Ich verstehe nicht, wie es Index 5 erreicht! Kann mir bitte jemand das erklären?

Ich habe hier ein paar Beispiele für diesen Fehler gesehen, kann diese aber nicht überprüfen. Ich konnte das Problem nicht beheben, sorry.

package Test; 

import java.util.ArrayList; 
import java.util.List; 

public class MultiplesOf3And5 { 

public static void main(String[] args) { 
    int number = 10; 
    int total = 0; 

    List<Integer> multiples = new ArrayList<Integer>(); 

    for (int i = 1; i < number; i++) { 
     if (i % 3 == 0) { 
      System.out.println(i + " is a multiple of 3"); 
      multiples.add(i); 
     } else if (i % 5 == 0) { 
      System.out.println(i + " is a multiple of 5"); 
      multiples.add(i); 
     } 
    }  

    for (int j : multiples){ 
     System.out.println(multiples.get(j)); 
     System.out.println(multiples.toString()); 
     total += multiples.get(j); 
    } 

    System.out.println(total); 

} 

} 

Antwort

1

for-each Iterierten Schleife die Werte Ihrer Liste multiples, verwendet man jeden Wert der Liste als Index durch Zufall. Fix es wie folgt:

for (int j : multiples){ 
    System.out.println(j); 
    System.out.println(multiples.toString()); 
    total += j; 
} 

Die Ausgabe lautet:

3 is a multiple of 3 
5 is a multiple of 5 
6 is a multiple of 3 
9 is a multiple of 3 
3 
[3, 5, 6, 9] 
5 
[3, 5, 6, 9] 
6 
[3, 5, 6, 9] 
9 
[3, 5, 6, 9] 
23 
0
System.out.println(j); 

Sie versuchen die j th Objekt aus der Liste zu bekommen, aber die Sie über die Werte den Index nicht iterieren.

0

Der var j hält den aktuellen Wert Ihrer Iteration nicht den aktuellen Index der Iteration.

Dies sollte genug sein:

for (int j : multiples) { 
    System.out.println(multiples.toString()); 
    total += j; 
} 
+0

Warum verwenden Sie 'multiples.get (j)'? –

+0

Ich sollte nicht, guter Punkt;) –

0

Ihre Arraylist haben = 3,6,9 (Faktor 3) & 5 (Faktor 5)

so insgesamt 4- Wert resident in ArrayList.

jetzt Sie versuchen, auf Index wie 0,1,2,3 ... Wert von ArrayListnicht Basis zu erhalten, aber Sie Wert von ArryList ebenfalls sind holen, multiples.get (3), .get (6) ... usw.

das ist, warum Sie Fehler erhalten, wie ArrayIndexOutOfBoundException.

besser auf diese Weise zu folgen,

for (int j : multiples){ 
     System.out.println(j); 
     System.out.println(multiples.toString()); // not required but you want then remain it is likewise... or else remove this line 
     total += j; 
    } 
0

Ihr Fehler auftritt, weil Ihre for-Schleife wird die Ist-Werte der Array-Liste zuweisen. Versuchen Sie dies:

for(int j = 0, j < multiples.size(), j++) { 
    System.out.println(multiples.get(j)) 
} 
Verwandte Themen