java - 数组索引超出范围

时间:2015-09-18 08:21:06

标签: java

为什么此代码显示错误消息java.lang.ArrayIndexOutOfBoundsException:-2146737495 !! 我认为数组的大小足够了。

class Main {
static int[] ara = new int[1000010];


public static void seive(){
    for(int i = 0; i <= 1000000; i++)
        ara[i] = 0;
    ara[1] = 1;

    for(int i = 2; i <= 1000000; i ++)
    {
        if(ara[i] == 0)
        {
            for(int j = i * i; j <= 1000000; j += i)
                ara[j] = 1;
        }
    }
}
public static void main(String[] args)
{
    seive();
}

}

2 个答案:

答案 0 :(得分:1)

Java数组的大小首先由内存限制,然后在Integer.MAX_VALUE之后。

您正在数组位置传递Integer.MAX_VALUE

但值-2146737495为负,为什么???

因为Integer.MAX_VALUE + 1 = Integer.MIN_VALUE

答案 1 :(得分:1)

你在做:j = i * i 当我用这篇文章记录代码时:

for(int j = i * i; j <= 1000000; j += i)
{
     System.out.println("i: " + i + " -j: " + j);
     ara[j] = 1;
}

我知道这个输出:

i: 997 -j: 997000
i: 997 -j: 997997
i: 997 -j: 998994
i: 997 -j: 999991
i: 46349 -j: -2146737495

j = i * i(将是-2146737495)抛出异常。