Инкремент и декремент до и после в Java

Послезавтра у меня экзамен по компьютерам (JAVA), и у меня большая проблема с вышеуказанным заголовком. Я понял, что означает post, pre increment и decrement. Но не могу понять, что делать, когда дело доходит до сложного, длинного высказывания. Один из примеров такого вопроса приведен ниже.

class java_1
{ 
  public void main()
{
int x = 4;
x += x++ - --x + x + x--;
}
}

Вы видите, что я имел в виду под сложными утверждениями. Оператор содержит только одну переменную, которая увеличивается и уменьшается снова и снова, и здесь я запутался. Не могли бы вы помочь мне прояснить мое замешательство. Также, пожалуйста, дайте ответ на приведенный выше код.


person Ishaan    schedule 18.03.2015    source источник
comment
Сначала прочитайте это: Как мне задать хороший вопрос?. С другой стороны, попробуйте, отладьте, и вы увидите. Кстати, никто не должен использовать такие операции в производственном коде, потому что никто никогда этого не поймет.   -  person Nagy Vilmos    schedule 18.03.2015
comment
Если вы больше ничему не научились на уроках по компьютерам, пусть это будет «Не пишите такой код».   -  person jas    schedule 18.03.2015
comment
Конечно, ответ на этот вопрос заключается в том, что этот код абсолютно ничего не обнаруживает.   -  person Andy Turner    schedule 18.03.2015
comment
Это забавный вопрос, чтобы проверить ваше понимание приоритета операторов, но если вы когда-нибудь обнаружите что-то подобное в реальности, первым делом вы должны обратиться к своему боссу и уволить парня, который это написал.   -  person Florian Schaetz    schedule 18.03.2015
comment
Как вы оцениваете такое математическое выражение, как 1 + 2 - 3 * 4 + 5 / 6 - 7 - 8 + 9?   -  person Seelenvirtuose    schedule 18.03.2015


Ответы (1)


a += b; похож на a = a + b. Используя это предположение, мы можем переписать

x += x++ - --x + x + x--;

as

x = x + (x++ - --x + x + x--);

Давайте теперь получим x = 4 и оценим правую сторону (слева направо)

x + (x++ - --x + x + x--) 

4 + (x++ - --x + x + x--) 
^                         //still x = 4

4 + (4 - --x + x + x--)   
     ^                    //x++ use current value (4), then increment x to 5

4 + (4 - 4 + x + x--)
         ^                //--x decremented to 4, then use current value (4)

4 + (4 - 4 + 4 + x--)     
             ^            //still x = 4

4 + (4 - 4 + 4 + 4)       
                 ^        //x-- read current value (4), then decrement x to 3

Итак, мы получаем

x = 4 + (4 - 4 + 4 + 4);

что значит

x = 12;
person Pshemo    schedule 18.03.2015
comment
Хорошая визуализация процесса. - person jas; 18.03.2015