2011-04-14 88 views
0

這讓我吃驚。以下測試失敗;循環結束與我有價值9,而不是8.你能解釋它嗎?雖然循環結束條件

import junit.framework.TestCase; 

public class TestDoWhile extends TestCase { 
    final int LIMIT = 8; 

    public void testDoWhile() throws Exception { 
     int i = 0; 
     do { 
     } while (i++ < LIMIT); 
     assertEquals(LIMIT, i); 
    } 
} 
+2

我會親自避免任何代碼,它可以使運算符優先級混淆... – 2011-04-14 17:21:48

回答

7

你需要這樣做:

++i < LIMIT 

你有它的條件進行評估的方式,然後 i遞增。如果你這樣做,我會在評估之前遞增。

+0

D'oh!謝謝。一旦系統允許,我會盡快接受你的回答。 – 2011-04-14 16:57:14

4

原因必須是在最後一次評估後最後一次遞增變量的i ++。

+0

+1:他可能會尋找'++ i'代替。 – 2011-04-14 16:55:48

0

在我通過循環的過程中,當i爲8時,++將其遞增爲9,但是作爲後增量運算符,它是原始的8與LIMIT的比較,失敗並退出循環。

0

i ++表示在此表達式上使用後增加i。試試++我得到預期的結果。

/維克托