我正在制作一个寻找素数的程序。我将素数和所有正整数(现在直到100)存储在两个ArrayList<Integer>
中。这是代码:
import java.util.ArrayList;
public class PrimeNumbers {
static ArrayList<Integer> num = new ArrayList<Integer>();
static ArrayList<Integer> prime = new ArrayList<Integer>();
public static void main(String[] args) {
prime.add(2);
prime.add(3);
prime.add(5);
for (int z = 1; z<=100; z++){
num.add(z);
}
outer: for (int a = 1; a <=num.size(); a++){
inner: for (int b = 1; b <=prime.size(); b++){
if (num.get(a)%prime.get(b) != 0){//line 14
if (prime.indexOf(b)+1 == prime.size()){
prime.add(a);
continue outer;
}
else
continue inner;
}
else
continue outer;
}
}
System.out.println(prime);
}
}
但是当我运行程序时,会出现这些错误:
线程中的异常&#34; main&#34; java.lang.IndexOutOfBoundsException:索引:3,大小:3 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429) 在PrimeNumbers.main(PrimeNumbers.java:14)
出了什么问题?
答案 0 :(得分:3)
列表索引从0到size()-1
,但您从1循环到size()
。
答案 1 :(得分:0)
Collection
的第一个元素有索引0
,而不是1
。因此,例如,访问第三个元素应该是collection.get(2)
。
你的循环应该迭代如下:
outer: for (int a = 0; a < num.size(); a++){
inner: for (int b = 0; b < prime.size(); b++){
...
}
}
请注意严格(<
)索引比较。此外,还有以下更简单的方法:
outer: for (Integer numItem : num){
inner: for (Integer primeItem : prime){
...
}
}
这个for
循环形式遍历整个集合。
答案 2 :(得分:0)
尝试使用Double而不是Integer。 (注意Double是一个大写为“D”的对象。)