我正在编写关于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);
}
}
答案 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))
}