Несколько постфиксных и префиксных операций в одной строке
int i=0;
int j = --i;
int k = i++ + --i + i-- + j-- + --i + i;
System.out.print("k= "+k); // k=-10
Кажется, я не могу понять, как получается, что значение k равно -10?
Вот то, что я чувствую, должно было случиться. Результат должен был быть -5 согласно моим расчетам.
Expression |Evaluation | Current Values
| | i=0 ,j=-1
i++ | 0 | i=1 ,j=-1
i++ + --i | 0 + 0 | i=0 ,j=-1
i++ + --i + i-- | 0 + 0 + 0 | i=-1 ,j=-1
i++ + --i + i-- + j-- | 0 + 0 + 0 + -1 | i=-1 ,j=-2
i++ + --i + i-- + j-- + --i | 0 + 0 + 0 + -1 + -2 | i=-2 ,j=-2
i++ + --i + i-- + j-- + --i + i; | 0 + 0 + 0 + -1 + -2 + -2 | i=-2 ,j=-2
Пожалуйста, поправьте меня, если я ошибаюсь.
* После исправления ошибки я принял значение 0 вместо -1 *
Выражение теперь оценивается как -10 (-1 + -1 + -1 + -1 + -3 + -3). Благодарю.
Expression |Evaluation | Current Values
| | i=-1, j=-1
i++ | -1 | i= 0, j=-1
i++ + --i | -1 + -1 | i=-1, j=-1
i++ + --i + i-- | -1 + -1 + -1 | i=-2, j=-1
i++ + --i + i-- + j-- | -1 + -1 + -1 + -1 | i=-2, j=-2
i++ + --i + i-- + j-- + --i | -1 + -1 + -1 + -1 + -3 | i=-3, j=-2
i++ + --i + i-- + j-- + --i + i; | -1 + -1 + -1 + -1 + -3 + -3 | i=-3, j=-2
2 ответа
Решение
Если вы правильно сделаете декременты и приращения, вы получите следующее: int k = -1 + (-1) + (-1) + (-1) + (-3) + (-3)
что равно -10
Я думаю, что вы пропускаете изменение значения 'i' в
int j = --i;
Здесь я поворачиваю -1, тогда j = -1
Итак, вы начинаете с значений i=-1, j=-1.