首页 > 解决方案 > 我的老师说我应该将布尔变量移动到循环中。但我不明白该怎么做

问题描述

我的Java代码:

import java.util.Scanner;

public class PrimeNumbers {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("Введите целое число: ");
    int n = scanner.nextInt();
    boolean isPrime = false;

    for (int i = 2; i <= n; i++) {
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                isPrime = false;
                break;
            } else {
                isPrime = true;
            }
        }
        if (isPrime) {
            System.out.println(i);
        }
    }
}

}

但是我的老师说我应该将布尔变量移到循环中。这将简化代码。但我不明白该怎么做。

标签: javaloopsboolean

解决方案


你的老师说的是这一行:

布尔 isPrime = false;

需要移到评论所在的循环中。您显然正在寻找 2 和 n 之间的所有素数。您的循环变量“i”是要测试的素数,无论它是否为素数,都需要在false每次开始迭代测试时初始化。

for (int i = 2; i <= n; i++) {

    // NEEDS TO BE RIGHT HERE - 
    boolean isPrime = true;
    // You are finding Prime Numbers, and the outer-loop (loop-var 'i')
    // Means the 'isPrime' needs to be re-initialized each time you start testing
    // whether a certain number, i, is prime or not!

    for (int j = 2; j < i; j++)
        if (i % j == 0) { isPrime = false; break; } 

    // and this line needs to be removed completely.
    // else { isPrime = true; }
    if (isPrime) System.out.println(i);
}

推荐阅读