簡體   English   中英

Java:具有復合條件的for循環的異常行為

[英]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=2i=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循環的工作方式如下:

  • 變量分配(VA)
  • 保持運行的條件(Cdnl)
  • 增量(增量)

要在代碼中解決問題,您需要先了解問題所在。 對於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.

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