我试图用Java做的事:为什么while循环在条件为false时处理为真?
int i=5;
while(i-- >0) {
System.out.println(i);
}
当运行该程序的输出是:
4
3
2
1
0
我很惊讶地看到在输出0
。我是新的发展。任何人都可以证明这一点?
我试图用Java做的事:为什么while循环在条件为false时处理为真?
int i=5;
while(i-- >0) {
System.out.println(i);
}
当运行该程序的输出是:
4
3
2
1
0
我很惊讶地看到在输出0
。我是新的发展。任何人都可以证明这一点?
在你while
条件i-- > 0
,可变i
评价第一,然后递减。
当i
达到值1
时,它将通过循环测试,然后递减到0
。这就是为什么打印语句在输出中显示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
简而言之,因为您之后比较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
值高于百达,那么你outputing之一。这发生在--
运营商的工作方式。如果它在i
之前为--i
,则它将首先递减变量i
,然后返回它的值。如果它不在您的案例i--
之前,您将首先返回i
,然后i
后面的值减少。
由于您使用的是递减后的运营商在while循环中,当i
为1时,i--
返回1,然后在循环中您上次打印i
时得到0。
仅仅是因为邮件篡改运营商(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)
(真)和打印4
。
i =4
条件语句将(4>0)
(真)和打印3
。
i =3
条件语句将(3>0)
(真)和打印2
。
i =2
条件语句将(2>0)
(真)和打印1
。
i =1
条件语句将(1>0)
(真)和打印0
。
现在,i
成为0
所以条件语句将(0>0)
(假)。
所以,Loop退出。
后减量/增量操作的原则作品“使用,然后再更改”
起初我= 5的值,当它进入while循环会先比较我的值,然后输出递减的值。在这里,我将说明与在每次迭代中执行的检查沿着每次迭代中,
现在的值i = 5(在存储器中),而内部(5> 0),它打印4.
现在i = 4(在内存中)的值,在(4> 0)的内部,它打印3.
现在i = 3(在内存中),内部while(3> 0)
现在i = 2(在内存中)的值,在(2> 0)的内部,它打印1个。
现在值与i = 1(在内存中),而(1> 0)内,它打印0
希望现在你清楚不前。 Gud Luck。
滞后递减操作--
是像后付费服务。就像信用卡一样,首先你用,然后你付钱。
我想我可以给你真正在这个声明中发生的真实生活理念,当i == 1
while(i-- >0)
所以,首先你检查是否i(1)>0
。1>0
所以,是的。在声明完成之后,i
变为0.然后,打印该值。
或者,您也可以通过注意到虽然您的循环以i=5
开头,但值5
从未打印。
是的先生, 你明白了,今天他们只学习循环。 你是对的我初始化为5. –