显示200个不同的素数,从0到10000

时间:2014-08-16 15:00:41

标签: java integer

我一直在尝试打印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。请帮帮我。

2 个答案:

答案 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)

Eran pointed out the issue.

要解决这个问题,你必须像这样限制for循环的上限:

for(int k = 0; k < 199; k++) {
     if(a[k] == 0) { 
         a[k]     = i;
         a[k + 1] = 0;
     }
}