这个程序给出了数组超出范围的异常:100 怎么解决???还告诉我我的阵列打印方法是否正确?
import java.util.Random;
import java.lang.Math;
class MersennePrime {
public int[] MersennefindPrime() {
int i=0;
int k=0;
int array[] = new int[100];
for(i=2;i<100;i++)
{
int count=0;
for(int j=2;j<=Math.sqrt(i);j++ )
{
if(i%j==0)
{
}
else
{
array[k]=i;
k++ ;
}
}
}
return array;
}
}
public class MersenneRandomNumbers
{
public static void main(String[] args)
{
MersennePrime mrn = new MersennePrime();
int array[] =mrn.MersennefindPrime();
for(int s=0;s<=array.length;s )
System.out.println("array is " array[s]);
}
}
}
答案 0 :(得分:4)
此
for(int s=0;s<=array.length;s )
System.out.println("array is " array[s]);
}
应该是这样的
for(int s=0; s<array.length; s++) {
System.out.println( "array is " + array[s] );
}
请注意从<=
到<
的更改!
在你的代码中,在最后一个循环中s
等于array.length
,这只是数组边界之外的第一个索引。
编辑
除了上面的句法错误,这里也有一个逻辑错误。在MersennefindPrime()
中,外循环从0到100运行,而内循环从2到10运行(“最坏情况”)。因此,可能会有大约10 * 100次,其中增加k
和尝试在数组中设置相应的索引。这远远超过了为数组分配的100个项目!
如果在初始化时无法确定数组的范围,请使用实现接口List
的某个类。这可能是这样的:
public List<Integer> MersennefindPrime() {
ArrayList<Integer> array = new ArrayList<Integer>();
for(int i=2;i<100;i++)
{
for(int j=2;j<=Math.sqrt(i);j++ )
{
if(i%j==0)
{
}
else
{
array.add( i );
}
}
}
return array;
}
您必须相应调整main()中的代码!