我一直在挣扎数小时,无法找到合理的解释。 这是一个代码:
int num = 1;
while (num++ < 5);
System.out.println(num); // Why num == 6 ??
所以,问题是为什么num == 6? 我认为这段代码与下面相同:
int num = 1;
while (num < 5) num++;
System.out.println(num); // num == 5
答案 0 :(得分:4)
int num = 1;
while (num++ < 5);
System.out.println(num);
这里每次比较和增加num。因此,对于最后一次迭代,num递增但条件失败。所以输出是6。
int num = 1;
while (num < 5) num++;
System.out.println(num);
这里你将num与5进行比较并递增num。对于最后一次迭代,条件失败并且没有增加num。所以输出是5。
答案 1 :(得分:1)
你的第一个while
循环没有执行任何操作,除了增加num
之外 - 请在while
语句后面看到分号。
由于一元增量在条件之后进行评估,num++ < 5
将增加num
,直到其值为6
,因为终止条件为num == 5
,然后{{1再次增加一次。
在您的第二个示例中,如果条件适用,num
会增加 ,因此比第一个示例少一个时间。
示例1
num
分配给1
num
:是num
?是1 (increment later) < 5
:是num
?是2 (increment later) < 5
:是num
?是3 (increment later) < 5
:是num
?是4 (increment later) < 5
:是num
?不,停止5 (increment later) < 5
仍然增加num
因此1
示例2
num == 6
分配给1
num
:是num
?是的,因此增加1 < 5
num
:是num
?是的,因此增加2 < 5
num
:是num
?是的,因此增加3 < 5
num
:是num
?是的,因此增加4 < 5
num
:是num
?不,停止而不增加5 < 5
答案 2 :(得分:1)
while (num++ < 5);
while (num < 5) num++;
答案 3 :(得分:1)
由于while (num++ < 5);
是一个表达式,其值为未增加的值num
,while (num < 5) num++;
将以num++;
增加1超过5结束
使用num
时,语句 num
只会运行到{{1}}为4:语句后{{1}}的值为{{1}}最后一次跑了将是5。
答案 4 :(得分:0)
原因是因为比较是在num的增量之前完成的。因此num
等于5
的步骤看起来像这样:
num = 5
num < 5, so exit loop
num++
num = 6
print num
如果您使用了预增量,例如while(++num < 5);
,那么num
在循环结束时就会5
。
答案 5 :(得分:0)
因为while (num++ < 5);
会首先将num
与值进行比较,然后会增加它。例如,当num -> 5
然后5 < 5
为false时,循环将终止,但++
将使num增加1
。
然而,在第二个示例ie while (num < 5)
中,当num -> 5
和num++
永远不会被调用时,循环将终止,因此num
将是5而不是6。 / p>
答案 6 :(得分:0)
int num = 1;
while (num++ < 5);
System.out.println(num);
在检查
之前,您的incrementing
值是int num = 1;
while (num < 5) num++;
System.out.println(num);
incrementing
在此检查
后,您的++num
值为(prefix)
如果你正在寻找相同的循环,那么你需要做一个增量,如num++
称为(postfix)
,而不是int num = 1;
while (++num < 5);
System.out.println(num);
称为int num = 1;
while (num < 5) num++;
System.out.println(num);
,所以你的代码看起来像
to_date('to_date(''''2-2-2016'''',''''DD-MM-YYYY'''')', '<default nls_date_format mask>')
现在上述条件与
相同<ebasp_date_of_joining>2-2-2016<ebasp_date_of_joining>
答案 7 :(得分:0)
在比较循环的最后一次运行中,num ++&lt; 5将首先进行比较,然后在断开循环之前将1添加到num。因此结果将比另一个循环高1。最后一次运行时,如果条件为假,则num将为5。在终止循环之前的那一点,它将加1,即num将变为6 ad然后中断。在另一个循环中,它不会进入循环,因此不会增加到6。
答案 8 :(得分:0)
在第一种情况下,System.out.println不在while循环体中。因为如果没有花括号,那么它将单个语句作为主体,意味着首先出现的分号是单个语句。在你的情况下,它是空语句
; // is empty statement and valid
当那个时候num = 6的while循环出来并打印出
答案 9 :(得分:0)
以简单的陈述
$num++ < 5 =>> $num < 5; $num = $num + 1;
++$num < 5 =>> $num = $num + 1; $num < 5;
和强>
while($num < 5) $num++; =>> when (4 < 5)-->> true; --> $num = 5;
=>> when (5 < 5)-->> false;--> $num = 5;;