为什么我在这个while循环中声明一个布尔外部与内部的布尔值是否重要?

时间:2016-07-31 15:15:02

标签: java loops boolean

public class FindPrimes {
    public static void main(String[] args) {
        int Number_of_prime = 50;
        int number_of_final = 10;
        int count = 0;
        int number = 2;
        boolean isPrime = true;

        while (count < Number_of_prime) {
            for (int divisor = 2; divisor <= number / 2; divisor++) {
                if (number % divisor == 0) {
                    isPrime = false;
                    break;
                }
            }

            if (isPrime) {
                count++;
                if (count % number_of_final == 0)
                    System.out.println(number);
                else
                    System.out.print(number + " ");
            }
            number++;
        }
    }
}

该程序应找到前50个素数。当我在boolean isPrime循环之外声明while时(上面的例子)我只获得素数2和3,但当我在boolean isPrime循环中声明while时,我得到所有50个素数。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我假设你得到了正确的答案,但你不确定它是怎么回事。

isPrime之外声明while不起作用。为什么?因为如果你在循环中没有找到素数,你可以将isPrime设置为false ...并且永远不会再将它重置回true。因此,在非素数之后的任何后续数字将自动默认为非素数。

isPrime内声明while有效。为什么?因为每当您找到素数或非素数时,您都会将isPrime重置回其原始值,并且每个后续数字都可以并且将相应地评估其质数。

如果您仍然无法理解,请尝试将其绘制出来。

希望有所帮助。