首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用while循环分配数组值?

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

Stack Overflow用户
提问于 2016-11-17 14:59:57
回答 5查看 1.4K关注 0票数 3

我正在尝试创建一个while循环,它遍历每个可能的长数字,并将遇到的每个质数添加到质数数组中。由于while循环应该运行到质数的长度为200,因此我希望质数数组中填充前200个质数。取而代之的是我得到了全零。我已经成功地获得了20行,每行10个字符,中间有一个空格。我怎么才能让它们成为真正的质数呢?

代码语言:javascript
复制
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;


    }

}
EN

回答 5

Stack Overflow用户

发布于 2016-11-17 15:03:11

primes.length始终为200,因此永远不会进入while循环。

while循环是无用的。只需向for循环添加一个条件,该条件将在整个数组被赋值时退出。还要将primeCounter的初始化移到for循环之外。否则,所有的素数都将被赋值给primes[0]

代码语言:javascript
复制
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();
}

编辑:

正如Sweeper评论的那样,你还应该修复你的isPrime方法,因为它为2返回false

代码语言:javascript
复制
public static boolean isPrime(long number) {
    if (number == 2)
        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;
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-17 15:06:30

这段代码写下来了

代码语言:javascript
复制
    long primes[] = new long[200]; 

    while (primes.length > 200){

手段

代码语言:javascript
复制
while (200 > 200){

或与相同的

代码语言:javascript
复制
while (false){

所以你的循环永远不会被执行!

票数 0
EN

Stack Overflow用户

发布于 2016-11-17 15:10:23

因为你做到了:

代码语言:javascript
复制
while (primes.length > 200)

并且数组的长度始终是200,您永远不会进入while循环,并且数组中的零即将到来,因为当您创建"long“数组时,它会将其初始化为零

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40648563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档