簡體   English   中英

做循環與Java中的循環計數

[英]Do While Loops Versus For Loops in Java for Counting

在計算時,是應該使用do-while循環還是for循環? 因為這:

class Main {
  public static void main(String[] args) {
    int times = 1;
    do {
      System.out.println("I have printed " + times + " times.");
      times++;
    } while (times < 6);
  }
}

似乎與此完全相同:

class Main {
  public static void main(String[] args) {
    for (int times = 1; times < 6; times++) {
      System.out.println("I have printed " + times + " times.");
    }
  }
}

這是速度的差異嗎? 偏愛? 情況? 個人怪癖? 某種“Java社會禁忌”? 我不知道。 似乎可以用於有效計數,只需要更多。 兩者都打印完全相同的東西。

System.out.println("Many thanks!!");

你是對的,這些做同樣的事情(除了一個開始計數為0而另一個開始計數為1,但這只是一個實現細節)。 如果您的程序事先知道(在循環開始之前)您希望循環迭代多少次,那么大多數Java開發人員會告訴您使用for循環。 這就是它的設計目標。

while循環或do while循環更適合在退出循環之前查找特定值或條件的情況。 (類似於count >= 10userInput.equals("N") 。任何評估為布爾值True / False值的東西。)

面對這些困境時,目標是可讀性和熟悉性。 您不應該關注微觀優化。 注重可讀性並明確傳達您的意圖。 像其他人一樣在類似的情況下做。

就像@ Bill-The-Lizard所說的那樣, while循環向你的代碼的讀者建議你選擇它,因為你沒有計算,但重復直到滿足條件。 至少一次 - 否則你選擇while(...){ }循環。

換句話說, fordo {} while()while() { }通常工作相同。 但是你可以更好地傳達你對你特定邏輯的意圖。

這取決於程序員選擇何時使用for循環或while循環,但大多數程序員遵循的一般做法是

  • 對於循環
    當你知道循環將執行預定義的次數時(通常的做法,因為你也可以使用for(;true;)永遠循環)。 例如,循環運行10次或n次,其中n是變量


for(int i = 0; i < n; i++) {
    //Do something
}
  • 循環
    當你知道循環應該在特定條件的評估為true之后終止,否則你希望循環永遠運行(如while(true))並檢查while循環內的中斷條件。
    當你無法在第一時間找出條件並以while(true)開始時,首選while循環是首選的,但是一旦你在循環中編寫代碼,你就會很好地理解正在發生的事情,並了解要檢查的條件因此何時退出循環。 例如


while(x != 0) {
    //Do something;
    x--;
}


while(true) {
    // some code to execute on which the condition depends
    if(condition is true) {
        break;
    }
}
  • 做循環
    while循環類似於while循環,但差別很小。 也就是說它允許第一次迭代發生而不檢查條件(在while語句中指定,但你仍然可以評估塊內的條件(花括號))。

我認為這更像是一種可讀性和語法糖。 這一條件

while (condition)

也可以寫成

for (; condition; )

但顯然第一個看起來好多了,而且更具可讀性。

按照慣例,大多數Java開發人員使用for循環 有效的Java建議使用循環而不是while循環,因為循環變量可以使用更嚴格的范圍來減少錯誤。 http://www.corejavaguru.com/effective-java/items/45

最新版本的Java還允許以下內容

    IntStream.range(0, 6).forEach(
            i -> System.out.println("I have printed " + i + " times.")
    );

除了個人偏好之外,這個還有一個優點,即索引由運行時維護,程序員不需要++i

暫無
暫無

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

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