iT邦幫忙

0

Java for-loop問題

新手請教一下各位前輩!

這是我用來找Largest Prime的程式碼

根據下面的程式碼 正常來說 看條件會形成無限循環
但為什麼還可以return 得到 number?

public class LargestPrime {

    public static int getLargestPrime(int number) {
        if (number <= 1) {
            return -1;
        }
        
        for (int i = 2; i < number; i++) {  
            if (number% i == 0) {          
                number = number/i;                  
                i--;                                    
            }
        }
        return number;
    }
}

假如輸入21 :

//Main class
System.out.println(LargestPrime.getLargestPrime(21));

Output : 7

1 個回答

2
Darwin Watterson
iT邦研究生 1 級 ‧ 2021-08-15 08:46:26
最佳解答
輸入 21 後
第一次回圈:
21 除以 2,餘數是 1
第二次回圈:
21 除以 3,餘數是 0,number=21/3=7,i=2
第三次回圈:
7 除以 2,餘數是 1
第四次回圈:
7 除以 3,餘數是 1
第五次回圈:
7 除以 4,餘數是 3
第六次回圈:
7 除以 5,餘數是 2
第七次回圈:
7 除以 6,餘數是 1

結束!跳出回圈輸出 number = 7

number 是會變動的。以你輸入 21 為例,在第二次回圈時
number 就變成 7 了。
所以可以正常輸出 7。
/images/emoticon/emoticon07.gif

這個過程都懂
剛剛不懂的點是
我一開始的思維邏輯只想到滿足if條件的i--
因為有i--存在 ,i的值應該也是2或3之間徘徊

但是後來才想到,如果不滿足if條件,就不會觸發i--
然後一直i++就滿足了for的條件,跳出回圈。

看見大大的回覆後瞬間恍然大悟,引導了我的想法。
謝謝!

我要發表回答

立即登入回答