Программа 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 ++ - постинкрементный (подумайте об использовании и изменении)

Другие вопросы по тегам