簡単な質問があります。このループの結果が12であるのはなぜですか?11になると思いました...
public static void main(String[] args) {
int i = 10;
while (i++ <= 10){
}
System.out.println(i);
}
//RESULT: 12
簡単な質問があります。このループの結果が12であるのはなぜですか?11になると思いました...
public static void main(String[] args) {
int i = 10;
while (i++ <= 10){
}
System.out.println(i);
}
//RESULT: 12
whileループ内の条件を2回実行し、最初i = 10,
は11にインクリメントします。次に、i <= 10
もう一度チェックし、falseになりますが、それでもインクリメントi
されて12になります。
これは、ループを終了する前に別のチェックを実行する必要があるために発生します。
i is 10
check i++<=10?
i is 11
check i++<10?
exit
i is 12
i++
「の現在の値を教えてi
、それをインクリメントしてください」と言います。この場合、i = 10
それが増分されると11
、式は前の値に対してtrueである10
ため、ループが繰り返され、のテストが実行されi = 11
、が増分i
され12
、式がfalseになり、ループが停止します。
このインクリメント後の動作はやや混乱を招くため、まさに必要な場合にのみ使用する必要があります。++
一般に、何も返さないふりをする方がはるかに優れています。これにより、コードの意図がより明確になります。
while(i <= 10) {
i++;
}
Iteration 1 : i=10
condition true ===>>> while loop executed once
i incremented to 11
iteration 2 : i=11
condition false ===>>> while loop exited
but after exiting the while loop
i is incremented again to ===>>> i =12
and that is what you get as output