Java 如何使用while循环分配数组值?

Java 如何使用while循环分配数组值?,java,arrays,while-loop,Java,Arrays,While Loop,我试图做一个while循环,循环遍历每一个可能的长数,并将它遇到的每一个素数添加到素数数组中。由于while循环应该一直运行到素数的长度为200,因此我希望素数数组中填充前200个素数。相反,我得到了全零。我已经成功地获得了20行10个字符,每个字符之间有一个空格。我怎样才能让它们成为真正的素数呢 public class PrimeGenerator { public static void main(String[] args) { long primes[] =

我试图做一个while循环,循环遍历每一个可能的长数,并将它遇到的每一个素数添加到素数数组中。由于while循环应该一直运行到素数的长度为200,因此我希望素数数组中填充前200个素数。相反,我得到了全零。我已经成功地获得了20行10个字符,每个字符之间有一个空格。我怎样才能让它们成为真正的素数呢

public class PrimeGenerator {

    public static void main(String[] args) {

        long primes[] = new long[200]; 

        while (primes.length > 200){

            for(long y  = 2; y < Long.MAX_VALUE; y++) {
                int primeCounter = 0;

                if (isPrime(y) == true){
                    primes[primeCounter] = y;
                    primeCounter++;
                }
            }


        }

        for (int i = 0; i < 20; i++) {

            int primeCounter = 0;

            for(int p = 0; p < 10; p++) {
                System.out.print(primes[primeCounter] + " ");
                primeCounter++;
            }

            System.out.println();
        }
    }


    public static boolean isPrime(long number) {

        if (number % 2 == 0)
            return false;
        if (number == 2)
            return true;

        for(int x = 3; x*x <= number; x+=2) {   
            if (number%x == 0)
                return false;   

        } 

        return true;


    }

}
公共类素数生成器{
公共静态void main(字符串[]args){
长素数[]=新长素数[200];
而(素数长度>200){
对于(长y=2;y对于(int x=3;x*x
primes.length
始终为200,因此永远不会进入
while
循环

while
循环无效。只需在
for
循环中添加一个条件,该条件将在分配整个数组后退出。同时将
primeCounter
的初始化移动到
for
循环之外。否则,所有的prime将分配给
primes[0]

long primes[] = new long[200]; 
int primeCounter = 0;
for(long y  = 2; y < Long.MAX_VALUE && primeCounter < 200; y++) {
    if (isPrime(y) == true){
        primes[primeCounter] = y;
        primeCounter++;
    }
}
for (int i = 0; i < primes.length; i++) {
    System.out.print(primes[i]);
    if ((i+1) % 10 == 0)
        System.out.println();
}
此代码已被删除

    long primes[] = new long[200]; 

    while (primes.length > 200){
意味着

while (200 > 200){
或与

while (false){
因此,您的循环永远不会执行!

因为您执行了:

while (primes.length > 200)

数组的长度总是200,你永远不会进入while循环,数组中的零会出现,因为当你创建“long”数组时首先,数组的长度不会改变。因此,当您测试
primes.length>200时,这将始终是错误的,并且循环从未被输入。因此数组中的所有值都保留在默认值
0

为此,我将做如下工作:

int primeCounter = 0;
long current = 0L;
while(primeCounter < primes.length){
    if(isPrime(current)){
        primes[primeCounter] = current;
        primeCounter++;
    }
    current++;
}
int primeCounter=0;
长电流=0L;
while(素数计数器<素数长度){
如果(iPrime(当前)){
素数[素数计数器]=电流;
primeCounter++;
}
电流++;
}

数组的长度永远不会更改。如果声明数组的长度为200,则它的长度将始终为200。因此,您的while循环永远不会执行,甚至不会执行一次

代码中还有很多其他错误,因此我尝试创建一个尽可能少更改的解决方案:

public static void main(String[] args) {

    int primeCounter = 0;
    long nextPossiblePrime = 2;
    long primes[] = new long[200];

    while (primeCounter < 200) {

        for (long y = nextPossiblePrime; y < Long.MAX_VALUE; y++) {

            if (isPrime(y) == true) {
                primes[primeCounter] = y;
                primeCounter++;
                nextPossiblePrime = y + 1;
                break;
            }
        }


    }

    primeCounter = 0;
    for (int i = 0; i < 20; i++) {

        for (int p = 0; p < 10; p++) {
            System.out.print(primes[primeCounter] + " ");
            primeCounter++;
        }

        System.out.println();
    }
}


public static boolean isPrime(long number) {
    if (number == 2 || number == 3)
        return true;

    if (number % 2 == 0)
        return false;


    for (int x = 3; x * x <= number; x += 2) {
        if (number % x == 0)
            return false;

    }

    return true;


}

我仍然得到所有的零。@ScaryWombat这也不会有帮助,因为
素数。长度保持不变(200)。但这不会打印
2
。OP的
isPrime
也是错误的。@Sweeper我没有查看
isPrime()
。我认为这是正确的。谢谢!教授在提到前10000个素数时给了我这个链接,她想让我从中得到前200个素数:它显示2是一个素数,所以我设置方法接受2作为素数,以满足作业要求。@Jason_Silva是的,2是素数,但你把
If(数字%2==0)
条件在
if(数字==2)
之前,因此返回2的
false
public static void main(String[] args) {

    int primeCounter = 0;
    long nextPossiblePrime = 2;
    long primes[] = new long[200];

    while (primeCounter < 200) {

        for (long y = nextPossiblePrime; y < Long.MAX_VALUE; y++) {

            if (isPrime(y) == true) {
                primes[primeCounter] = y;
                primeCounter++;
                nextPossiblePrime = y + 1;
                break;
            }
        }


    }

    primeCounter = 0;
    for (int i = 0; i < 20; i++) {

        for (int p = 0; p < 10; p++) {
            System.out.print(primes[primeCounter] + " ");
            primeCounter++;
        }

        System.out.println();
    }
}


public static boolean isPrime(long number) {
    if (number == 2 || number == 3)
        return true;

    if (number % 2 == 0)
        return false;


    for (int x = 3; x * x <= number; x += 2) {
        if (number % x == 0)
            return false;

    }

    return true;


}
public static void main(String[] args) {
    ArrayList<Long> primes = new ArrayList<>();
    long y = 2;
    while (y < Long.MAX_VALUE && primes.size() < 200) {
        if (isPrime(y) == true){
            primes.add(y);
        }
        y++;
    }
    for (int i = 0; i < primes.size(); i++) {
        System.out.print(primes.get(i) + " ");
        if ((i+1) % 10 == 0)
            System.out.println();
    }
}


public static boolean isPrime(long number) {
    if (number == 2 || number == 3)
        return true;

    if (number % 2 == 0)
        return false;


    for (int x = 3; x * x <= number; x += 2) {
        if (number % x == 0)
            return false;

    }

    return true;


}