[英]java - Array index is out of bounds
为什么这段代码会显示错误信息 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();
}
}
Java 数组的大小首先受内存限制,然后受Integer.MAX_VALUE
。
您正在数组位置传递Integer.MAX_VALUE
。
但是值-2146737495
是负数,为什么??? .
因为Integer.MAX_VALUE + 1 = Integer.MIN_VALUE
你在做: 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)抛出异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.