ArrayList:IndexOutOfBounds异常问题

时间:2014-12-20 14:36:53

标签: java arraylist indexoutofboundsexception

我正在制作一个寻找素数的程序。我将素数和所有正整数(现在直到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)

出了什么问题?

3 个答案:

答案 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”的对象。)