2011-04-14 91 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。试试++我得到预期的结果。

/维克托