我一直在尝试打印200个素数的代码,其反向也是素数,而且数字不能是回文数。我设定了10000个数字的限制来检查,假设其中有大约200个这样的素数。但是我在51&st; st行中得到了一个Array Out Of Bound异常。任何人都可以为我清楚这一点吗?
import java.io.*;
import java.lang.*;
class Functions
{
int prime(int x)
{
int z=0;
for(int i=2;i<x;i++)
{
if(x%i==0) z=1;
}
if(z==1) return 0;
else return 1;
}
int reverse(int x)
{
int rev=0;
while(x!=0)
{ rev=rev*10; rev=rev+x%10; x=x/10; }
return rev;
}
int find(int x,int y[])
{
for(int g=0;y[g]!=0;g++)
{
if(x==y[g]) return 1;
}
return 0;
}
}
class Distinctp
{
public static void main(String arg[])
{
Functions S=new Functions();
int i;
int a[]=new int[200];
for(i=1;i<10000;i++)
{
if(S.prime(i)==1 && S.prime(S.reverse(i))==1)
{
if(i!=S.reverse(i))
{
if(S.find(S.reverse(i),a)==0)
{
for(int k=0;k<199;k++)
{
if(a[k]==0) //For assigning value in the last space of the array
{ a[k]=i; a[k+1]=0; }
}
}
}
}
}
for(i=0;i<200;i++)
{
System.out.println(a[i]);
}
}
}
我已经清除了例外情况,但我仍然没有得到正确的输出。当我运行它时,只重复打印数字13。请帮帮我。
答案 0 :(得分:1)
此代码会在k==199
时导致ArrayIndexOutOfBoundsException,因为a[k+1]
将是a[200]
,这超出了范围。
for(int k=0;k<200;k++)
{
if(a[k]==0) //For assigning value in the last space of the array
{
a[k]=i;
a[k+1]=0;
}
}
我没有看到a[k+1]=0;
答案 1 :(得分:0)
要解决这个问题,你必须像这样限制for
循环的上限:
for(int k = 0; k < 199; k++) {
if(a[k] == 0) {
a[k] = i;
a[k + 1] = 0;
}
}