Программа SCJP выдаёт вывод 8 2 как?
class Foozit {
public static void main(String[] args) {
Integer x = 0;
Integer y = 0;
for (Short z = 0; z < 5; z++) {
if ((++x > 2) || ++y > 2)
x++;
}
System.out.println(x + "Hello World!" + y);
}
}
Я попробовал этот кусок кода scjp, и я получаю вывод 5 3 может кто-нибудь сказать мне, где я иду не так
1 ответ
Цикл выполняется 5 раз (от 0 до 4)
В условии if ++ x вычисляется все пять раз. Но ++y вычисляется только тогда, когда первая часть условия ложна.
То есть это условие:
if ((++x > 2) || ++y > 2)
будет выглядеть так:
//1st iteration
if( 1 > 2 || 1 > 2 ) //False, x++ is not evaluated
//2nd iteration
if( 2 > 2 || 2 > 2 ) //False, x++ is not evaluated
//3rd iteration
if( 3 > 2 || 2 > 2 ) //True, the second ++y is skipped, but x++ is evaluated, x becomes 4
//4th iteration
if( 5 > 2 || 2 > 2 ) //True, the second ++y is skipped, but x++ is evaluated, x becomes 6
//5th iteration
if( 7 > 2 || 2 > 2 ) //True, the second ++y is skipped, but x++ is evaluated, x becomes 8
Итак, наконец, мы имеем:
x = 8 and y = 2
Помните: ++ x - это преинкремент (подумайте об изменениях и использовании), а x ++ - постинкрементный (подумайте об использовании и изменении)