簡體   English   中英

我正在嘗試打印質數,但不確定我的代碼有什么問題

[英]I'm trying to print out prime number but not sure what's wrong with my code

我的代碼

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*f <= max替換f < maxF

因為循環最大值應該小於或等於

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM