Arraylist OutOfBoundsException:索引:5,大小:4

时间:2016-03-29 15:37:28

标签: java

我正在编写关于Code Wars的示例。基本上,取一个数字,找到3和5的倍数并将它们加在一起。假设数字是10,我们将有3,5,6,9。

我正处于想要将多个一起添加到一起的位置(底部的foreach循环)但我不断得到一个OutOfBoundsException。我不明白它是如何达到索引5的!有人可以向我解释一下吗?

我已经在这里看到了一些关于此错误的例子,但无法通过这些检查我无法解决问题,抱歉。

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

}

}

5 个答案:

答案 0 :(得分:1)

for-each循环迭代List multiples的值,您意外地将List的每个值用作索引。修复如下:

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

输出结果为:

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

答案 1 :(得分:0)

System.out.println(j);

您正试图将j对象从列表中删除,但是您正在迭代值而不是索引。

答案 2 :(得分:0)

变量j包含迭代的当前,而不是迭代的当前索引

这应该足够了:

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

答案 3 :(得分:0)

  

你的ArrayList有= 3,6,9(因子3)&amp; 5(因子5)

所以总 4值驻留ArrayList

现在你试图从ArrayList 获取价值而不是基于0,1,2,3这样的索引... 但你同样从ArryList获取价值, multiples.get(3),。get(6)......等等。

这就是您收到错误的原因,例如ArrayIndexOutOfBoundException

最好采用这种方式,

 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;
    }

答案 4 :(得分:0)

您的错误正在发生,因为您的for循环正在分配数组列表的实际值。试试这个:

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