[英]Java: Uncanny behaviour of for-loop with composite condition
我一直在用Java開發主要分解代碼。 為此,我在某個時候具有類似於以下代碼:
for(int i = 2; i <= 40 && isPrime(i); ++i){
System.out.println(i + " is less or equal to 40 and prime.");
}
但是,此代碼具有相當怪異的行為,因為它僅測試i=2
和i=3
。 isPrime()
方法沒有任何問題。 要加粗繪圖,可以使用以下代碼:
for(int i = 4; i <= 40; ++i){
if(isPrime(i))
System.out.println(i + " is less or equal to 40 and prime.");
}
這可能是一個非常愚蠢的問題,但是我在做什么錯呢?
在for循環中,條件決定是繼續還是終止循環。
因此,一旦(i<= 40 && isPrime(i))
在您的程序執行中第一次計算為false ,就不再運行循環。 這發生在第一個組合4上。因此,只有2和3被寫入屏幕。
for
循環中的第二個表達式表示“如果計算結果為false,則停止循環”。 使用while
循環,
for(A;B;C) {
D;
}
循環可以重寫為
A;
while (B) {
D;
C;
}
因此,一旦您處理了一個復合數字,循環就會終止。 您的情況是4。
在Java的重復部分中,for循環非常有趣。 for循環的工作方式如下:
要在代碼中解決問題,您需要先了解問題所在。 對於Java的新手來說很典型,人們可能會認為,如果Cdnl(條件)為假,那么它將繼續到下一個數字。 錯誤的,如果Cdnl為假,則循環將中斷。 For循環可以看作是更快的while循環:
int i = 0;
while(i <= 10) {
System.out.println(i);
i++;
}
//This is equal to:
for(int i = 0; i <= 10; i++) {
System.out.println(i);
}
足夠多的麻煩,讓我們修復代碼。 問題在於您的條件。 輕松解決:
for(int i = 2; i <= 40; i++) {
if(!isPrime(i)) continue;
System.out.println(i + " is less or equal to 40 and prime.");
}
if(!isPrime(i)) continue;
僅表示如果我 不是素數,則它將跳到循環的末尾,從而遞增並嘗試下一個數字。 不要被continue;
思考所愚弄continue;
表示繼續執行代碼。 簡單的菜鳥失誤。
希望可以解決它。
Jarod。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.