public class PrimeGenerator {
int a[] = null;

static int   m = -1; public PrimeGenerator(int max) {

int n = 0;
for (int i = 2; i <= max; i++) {
if (isPrime(i)) {
this.a[n] = i;

}
else
continue; } } public boolean hasNextPrime() {
if (m + 1 < a.length) {
return true;
} else
return false;
} public int nextPrime() {
m++;
if(m < a.length) return a[m];
else
return -1; } private boolean isPrime(int p) {
if (p == 1)
return false; int factor = p - 1;
while (factor > 1) {
if ((p % factor) == 0) {
return false;
}
factor--;
} return true;
}
}为什么在执行this.a[n] = i;的时候 报错.java.lang.NullPointerException
另:我感觉我的程序写复杂了...怎么写最简单. 一共2个方法. consturestor 用户输入max 取 2 到max 中的素数, 第一个方法.public boolean hasNextPrime() 如果有下一个素数返回 ture 没有 false , 第二个public int nextPrime() 取下一个素数 如果没有 返回-1.
多谢!!!!

解决方案 »

  1.   


    public class PrimeGenerator {
    int a[] =new int[100000];//创建一个足够大的数组,存放素数static int  m = -1;public PrimeGenerator(int max) {int n = 0;
    for (int i = 2; i <= max; i++) {
    if (isPrime(i)) {
    this.a[n] = i;
    n++;//如果是素数,数组的小标加一
    }
    else
    continue;}
      

  2.   

    ZiSheng 怎么可以让数组无限大呢....
      

  3.   


    int getPrime(int n){//返回下标为n的素数,其他的hasnextprime 和nextprime去掉吧
    if(n>=a.length){
    return -1;
    }
    else
    return a[n];
    }
      

  4.   

    回ZiSheng 谢谢!!我写编程作业...不能去掉...请问该怎么写
      

  5.   

    hasnextprime 和nextprime这两个函数的功能和我刚才写的getPrime功能相同int getPrime(int n){//返回下标为n的素数,如果有误返回-1;
    if(n>=a.length||a<=0){
    return -1;
    }
    else
    return a[n];
    }
      

  6.   

    我可以建一个数组 = max+1 么
      

  7.   

    可以,在C里边数组的大小必须提前确定,而java不需要
      

  8.   

    但是确定之后,不能再扩展,或者缩小数组的大小,如果想扩展或者缩小可以使用arraylist
      

  9.   

    int a[] = null; 
    靠..你猛~!
      

  10.   

    .....hasnextprime 和nextprime 怎么写......还是不会.....
      

  11.   

    int  a[]=NULL 有问题
    你随便定一个长度试试看
      

  12.   

    谁能把hasnextprime 和nextprime 写给我啊...求救