2016-07-31 64 views
-2

我設置了循環使「i」遞增,直到「i < 10」。在for完成後,我添加了一個輸出語句,在關閉括號括起來顯示我的值,結果爲10,而我認爲最大值可能只有9. 有人可以請解釋什麼導致「我」去超過它的最大值9?for循環超出設置條件

非常感謝, 弗拉德

public class Recap3 { 
    public static void main(String args[]) { 
    int i; 
    for(i=0;i<10;i++) { 
     System.out.println(i); // this statement lists values from 0 to 9 
    } System.out.println(i); // this statement returns i = 10 
    } 
} 
+3

如果'i'只會上升到9,'i <10'永遠不會是錯誤的。 – shmosel

+0

這個問題似乎有點人爲,因爲這不是使用'for'循環的慣用/正常方式。正常的方法是在循環內聲明並初始化_loop控制變量_('i')('for(int i = 0; i <10; i ++)')。這樣,'i'只在循環範圍內,並且不需要知道循環後它的值是什麼(因爲它不存在於那裏)。 –

+0

謝謝米克!將保持這一點:) – Vlad

回答

0

循環的每次迭代後,Java將執行for循環,i++的第三個任期。然後,它檢查i<10。如果這導致true,它繼續for循環,否則它停止。

這意味着首先,java設置我等於10,然後檢查它是否小於10,然後中斷。

的語句執行的是這個樣子:

System.out.println(i); //i=9 
i++; //i=10 
if(!(i<10)) break;//This breaks out of the loop 
System.out.println(i); //i=10 
+0

感謝您的幫助!這非常有意義!感謝Moshe – Vlad

0

這是不是一個錯誤。 i增加到10是預期的行爲。

每次迭代執行以下步驟之後發生:

  1. 在執行所述第三語句循環
  2. 然後評估在第二部分中的條件表達式。
  3. 如果條件表達式的計算結果爲true,則執行循環體並返回第一步。如果條件表達式評估爲false,則在循環後繼續執行。所以

上迭代時i等於9i首先加至10,然後比較:i<10。由於i<10爲false,因此循環終止。此時,i等於10

+0

!感謝你的幫助! – Vlad

0

該變量在循環的主體之前被檢查並且在主體之後遞增。

在循環(開始於i = 9)的最後幾個迭代,會發生以下情況:

  1. 條件i<10檢查。 9小於10,所以循環繼續。
  2. 循環體正在運行,值9被打印到屏幕上。
  3. 變量i遞增,給出值10.
  4. 檢查條件i<10。 10不小於10,所以循環退出。
  5. 運行循環外的語句。 i的值是10,所以10被打印到屏幕上。
0

第二個System.out.println不在循環中。循環只能達到9。您可以使用if語句創建一個高位數,然後在循環外部使用System.out.println(高位數)。