| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 546 人关注过本帖
标题:[求助]一个初级问题,错误如下
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
结帖率:50%
收藏
 问题点数:0 回复次数:9 
[求助]一个初级问题,错误如下
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中用同样的方法(里面的做法一模一样)可以通过得出正确的结果,可我不知道上面的那句报的什么错,应该要怎么改.先谢谢大家了.
搜索更多相关主题的帖子: 初级 
2007-09-05 23:20
george_vcool
Rank: 2
等 级:新手上路
威 望:3
帖 子:453
专家分:0
注 册:2007-7-23
收藏
得分:0 
数组越界了,
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);
}
}
}
}
2007-09-05 23:52
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
怎么越了.
for(j=2;i*j<=100;j++)
{
data[i*j]=0;
}

倚天照海花无数,流水高山心自知。
2007-09-05 23:53
george_vcool
Rank: 2
等 级:新手上路
威 望:3
帖 子:453
专家分:0
注 册:2007-7-23
收藏
得分: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],然而这个索引越界了!!!
2007-09-06 00:05
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
动态数组

详情请查看++

自我放逐。。。
2007-09-06 03:40
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
data[i]之前不是已经赋值为1了吗?为什么会默认为0?

I'm here, as always...
2007-09-06 09:42
george_vcool
Rank: 2
等 级:新手上路
威 望:3
帖 子:453
专家分:0
注 册:2007-7-23
收藏
得分: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循环时,就会导致我上面所说的情况!!
2007-09-06 13:23
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
原来如此,明白了!

I'm here, as always...
2007-09-06 13:55
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

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


倚天照海花无数,流水高山心自知。
2007-09-06 21:59
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用nuciewth在2007-9-6 21:59:03的发言:

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

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

2007-09-06 22:09
快速回复:[求助]一个初级问题,错误如下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040899 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved