有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想存储3到100之间的素数,并将它们存储在一个数组中,而不使用构造函数

我已经用java编写了这个程序,但它没有按预期工作。我想找到素数(不使用构造函数或方法)并将它们存储在数组中,但结果不同

public class Prime {
    public static void main(String []args){
        int s[]=new int[100];
        for (int i=3;i<=100;i++){
            int c=0;
            for (int j=1;j<=i;j++){
                if (i%j==0){
                c++;
                }
            }
            if (c<3){
                for (int a=0;a<s.length;a++){
                    s[a]=i;
                }
            }
        }
        for (int b=0;b<s.length;b++){
                System.out.println(s[b]);
        }
    }
}

预期: 3. 5. 7. . . . 97

获得的输出:


共 (2) 个答案

  1. # 1 楼答案

    这起作用了:

    public class Prime {
        public static void main(String []args){ 
            int[] primes = new int[100];
              int ncounter = 0;
              int isPrime = 2;
              while( ncounter < 100){
                boolean prime = true;
                for (int j=2; j<isPrime; j++){
                  if (isPrime%j ==0){
                    prime = false;
                    break;
                  }
                }
                if (prime){
                  primes[ncounter] = isPrime;
                  ncounter++;
                } 
                isPrime++;
               }
              return primes;
            }
        }
    
  2. # 2 楼答案

    错误在这里:

    for (int a=0;a<s.length;a++){
        s[a]=i;
    }
    

    每当你找到一个素数,你就把s每一个元素设置成这个数字,这意味着最终,s将被你找到的最后一个素数-97填充

    声明一个名为next的新变量,该变量跟踪数组中下一个素数的位置,而不是用找到的任何素数填充数组:

    int s[]=new int[100];
    int next = 0; // the first prime should go in index 0
    for (int i=3;i<=100;i++){
        int c=0;
        for (int j=1;j<=i;j++){
            if (i%j==0){
                c++;
            }
        }
        if (c<3){
            s[next] = i; // put it in next
            next++; // the next prime should go in the next index
        }
    }
    for (int b=0;b<next;b++){ // only loop to "next", because the indices past "next" are not set
        System.out.println(s[b]);
    }