ArrayList:IndexOutOfBoundsexception问题

我正在制作一个程序来查找素数。 我在两个ArrayList存储素数和所有正整数(现在直到100)。 这是代码:

 import java.util.ArrayList; public class PrimeNumbers { static ArrayList num = new ArrayList(); static ArrayList prime = new ArrayList(); 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); } } 

但是当我运行程序时,这些错误会显示出来:

线程“main”中的exceptionjava.lang.IndexOutOfBoundsException:索引:3,大小:3,java.util.ArrayList.rangeCheck(ArrayList.java:653),位于java.util.ArrayList.get(ArrayList.java:429)at PrimeNumbers.main(PrimeNumbers.java:14)

出了什么问题?

列表索引从0运行到size()-1 ,但是您从1循环到size()

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循环forms迭代整个集合。

尝试使用Double而不是Integer。 (注意Double是具有大写“D”的对象)。