当前位置: 代码迷 >> Java相关 >> [求助]一个初级问题,错误如下
  详细解决方案

[求助]一个初级问题,错误如下

热度:107   发布时间:2007-09-05 23:20:39.0
[求助]一个初级问题,错误如下
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 101
at Test.main(Test.java:23)


public class Test
{
public static void main(String args[])
{
int data[]=new int[101];
//int data[]={2,3,5,7,11,13,17,19,23,29,31,37,41,47,53,59,61,67,71,73,79,83,89,91,97};
int i,j;
for(i=2;i<=100;i++)
{
data[i]=1;
}
for(i=2;i<=100;i++)
{
while(data[i]==0)
{
i++;
}
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}
}
for(i=2;i<=100;i++)
{
if(data[i]==1)
{
System.out.print("\n"+i);
}
}
}
}

当然我在C中用同样的方法(里面的做法一模一样)可以通过得出正确的结果,可我不知道上面的那句报的什么错,应该要怎么改.先谢谢大家了.
搜索更多相关的解决方案: 初级  

----------------解决方案--------------------------------------------------------
数组越界了,
public class Test
{
public static void main(String args[])
{
int data[]=new int[101];
//int data[]={2,3,5,7,11,13,17,19,23,29,31,37,41,47,53,59,61,67,71,73,79,83,89,91,97};
int i,j;
for(i=2;i<=100;i++)
{
data[i]=1;
}
for(i=2;i<=100;i++)
{
while(data[i]==0)
{
i++;
}
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}
}
for(i=2;i<=100;i++)
{
if(data[i]==1)
{
System.out.print("\n"+i);
}
}
}
}
----------------解决方案--------------------------------------------------------
怎么越了.
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}

----------------解决方案--------------------------------------------------------
不好意思,刚才没有仔细看你的代码,现在看了一下,你的流程出现了问题
for(i=2;i<=100;i++)
{
while(data[i]==0)
{
i++;
}
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}
}
这条语句会导致越界.因为你后面的数会默认初始成0
所以当你判断是否为0时总是为真,到data[100]时仍为0,然后继续自加,就会判断data[101],然而这个索引越界了!!!
----------------解决方案--------------------------------------------------------
动态数组

详情请查看++
----------------解决方案--------------------------------------------------------
data[i]之前不是已经赋值为1了吗?为什么会默认为0?
----------------解决方案--------------------------------------------------------
for(i=2;i<=100;i++)
{
while(data[i]==0)
{
i++;
}
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}
}
在开始的时候i=2,判断data[2]!=0进入下面的j循环,把所有的偶数的值都赋值0,而后面的循环不会导致这个值变化,所以这个data[100]这个值就变为0,当最后进入while循环时,就会导致我上面所说的情况!!
----------------解决方案--------------------------------------------------------
原来如此,明白了!
----------------解决方案--------------------------------------------------------

非常感谢george_vcool.恍然大悟.
JAVA对数组越界检查的比C强.


----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2007-9-6 21:59:03的发言:

非常感谢george_vcool.恍然大悟.
JAVA对数组越界检查的比C强.

对。JAVA只要越界就会异常,而C不管。照样可以访问。这就造成了非法访问。这就是JAVA的高明之处之一哈哈。


----------------解决方案--------------------------------------------------------
  相关解决方案