ArrayIndexOutOfBoundsException问题

时间:2017-02-07 07:21:30

标签: java arrays indexing

我试图让所有素数在1到10之间,然后将它们放入一个数组中。我收到ArrayIndexOutOfBoundsException错误。

我得到这个是因为第一个for循环有starNum <=10而且数组在技术上还没有任何值吗?

我不知道如果仍然有1到10的范围,如何对语句进行短语。非常感谢帮助。

public static void main(String[] args) {

    int [] array = new int[args.length];

    for (int starNum = 1; starNum <= 10; starNum ++){
        boolean isPrime = true;
        int list = Integer.parseInt(args[starNum]);

        for (int i = 1; i*i <= starNum; i++) {
            if (starNum % 2 == 0) {
                isPrime = false;
            }
        }
        if (isPrime) {
            System.out.println(starNum);
            array[starNum] = list;
            System.out.println(array);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

确保数组索引从 0 开始,最后一个元素索引长度-1

在两个范围之间找到素数的简单程序,例如在你的情况下(1到10) -

public static void main(String[] args) {
    int i, flag;
    int low = 0;
    int high = 10;
    int arr[] = new int[10];
    int index = 0;
    while (low < high) {
        flag = 0;

        for (i = 2; i <= low / 2; ++i) {
            if (low % i == 0) {
                flag = 1;
                break;
            }
        }

        if (flag == 0) {
            arr[index] = low;//prime number array, print it to check
            index++;
        }
        ++low;
    }
}

arr 是包含素数的数组。你可以提供低值和最高值的最小值到高值。

答案 1 :(得分:0)

第一个forloop有问题。

索引将始终以0(零)开始,但不会以1开始。因此,请更改第一个for循环,如下所示

for (int starNum = 0; starNum < args.length && starNum <= 10; starNum ++){