我正在尝试打印素数,但不确定我的代码有什么问题

问题描述

我的代码

void printPrimes (int max) {
    boolean prime;
    for (int n = 2; n < max; n++){
        prime = true;
        double maxF;
        maxF = Math.sqrt(n);
        for (int f = 2; f < maxF; f++) {
            if (n % f == 0) {
                prime = false;
            }
        }
        if (prime == true) {
            System.out.println(n + " is prime");
        }
    }
}

这是我得到的结果

4是素数
5是素数
6是素数
7是素数
8是素数
9是素数
10是素数
11是素数

我该如何解决此问题

解决方法

调试代码。如图所示,拿出笔,是计算机。您在不运行此代码的情况下回答了它应该做什么。然后检查它对调试器的实际作用(如果需要,或sysout语句)。在那找到差异的地方,您发现了一个错误。

例如Math.sqrt(4),那是什么? 2比2小吗?

,

在循环中更改条件

for (int f = 2; f <= maxF; f++) { // should be <= maxf
     if (n % f == 0) {
        prime = false;
     }
}
,

至少将f < maxF替换为f*f <= max

,

因为循环最大值应小于或等于

Math.sqrt(数字)

public class Main {
    public static void main(String[] args) {
        printPrimes(20);
    }
    
    
    static void printPrimes (int max) {
        for(int i=2;i<=max;i++){
            if(isPrime(i)){
                System.out.println(i+" is prime");    
            }
        }
    }
    
    static boolean isPrime(int number) {
        if(number < 2){
            return false;
        }
        for(int i=2;i<=Math.sqrt(number);i++){
            if(number % i == 0){
                return false;
            }
        }
        return true;
    }
}