我想用Java做的事情:
int i=5;
while(i-- >0) {
System.out.println(i);
}
运行此程序时输出为:
4
3
2
1
0
我很惊讶在输出中看到0
。我是新的发展。有人可以证明这一点吗?
答案 0 :(得分:5)
在while
条件i-- > 0
中,变量i
首先评估 ,然后递减。
当i
达到值1
时,它将通过循环测试,然后递减到0
。这就是print语句在输出中显示0
的原因。
这是一个助记符,可用于跟踪减量和增量运算符的工作方式:
int i = 5;
System.out.println("When i = 5 then:");
System.out.println("i-- is " + i--);
i = 5;
System.out.println("--i is " + --i);
<强>输出:强>
When i = 5 then:
i-- is 5
--i is 4
答案 1 :(得分:4)
简单地说,因为您之后比较i>0
并递减i
。
// If I is 1, you compare 1>0 and decrement i afterwards.
// This is how the postdecrement operator works
while(i-- >0) {
System.out.println(i);
}
循环将表现如下。
is i=5 > 0?
decrement i to 4
output i = 4.
is i=4 > 0?
decrement i to 3
output i = 3.
...
and so on
正如您所看到的,与0
比较的值总是高于您输出的值。这是因为--
运算符的工作原理。如果它在i
之前作为--i
,它将首先递减变量i
并在之后返回它的值。如果它不在您的案例i--
之前,那么您将首先返回i
的值,之后将i
减少。
答案 2 :(得分:2)
后递减/递增操作符的工作原则是&#34;先使用然后更改&#34;
最初i = 5的值,当它进入while循环时,它将首先比较i的值,然后打印减少的值。在这里,我将向您展示每次迭代以及在每次迭代中执行的检查,
现在i = 5(在内存中)的值,在(5> 0)内,它打印4。
现在i = 4(在内存中)的值,在(4> 0)内,它打印3。
现在i = 3(在内存中)的值,在(3> 0)内,它打印2。
现在i = 2(在内存中)的值,在(2> 0)内,它打印1。
现在i = 1(在内存中)的值,在(1> 0)内,它打印为0.
希望你现在明确继续前进。 Gud Luck。
答案 3 :(得分:2)
后递减运算符--
就像后付费服务 。就像信用卡一样,首先使用,然后付款。
当我i == 1
while(i-- >0)
所以,首先检查一下i(1)>0
。 1>0
所以,是的。在此语句完成后,i
变为0.然后,您打印该值。
或者,您可能也会注意到,虽然您的循环以i=5
开头,但您可能也会得到这种直觉,但值5
从未打印过。
答案 4 :(得分:1)
由于你在while循环中使用了post-decrement运算符,当i
为1时,i--
返回1,然后在循环内部,当你打印i
时得到0最后一次。
答案 5 :(得分:1)
仅因为后期递减运算符(i--)
将首先检查条件然后降低i
的值。输出是这样的。谢谢
int i=5; //initialize with 5
while(i-- >0) { //post decrements operator so, check condition first then decrease the value.
System.out.println(i);
}
在while
循环的第一次迭代中,检查5 > 0
将会在检出i
并且i
变为4
之后进行检查因此,打印4
而不是5
。
什么时候
i =5
条件语句将为(5>0)
( true )并打印4
。
i =4
条件语句将为(4>0)
( true )并打印3
。
i =3
条件语句将为(3>0)
( true )并打印2
。
i =2
条件语句将为(2>0)
( true )并打印1
。
i =1
条件语句为(1>0)
( true )并打印0
。
现在,i
变为0
因此,条件语句将为(0>0)
(错误)。
所以,Loop退出。
答案 6 :(得分:-2)
要获得所需的输出,请尝试此
while(--i >0) {
System.out.println(i);
}