#java
Не работает выражение cont = cont++
Сам код:
public class ForDemo {
public static void main (String args[]){
int cont;
for (cont = 0; cont < 5; cont = cont++){
System.out.println("Значение счетчика:" + cont);
}
System.out.println("Готово");
}
}
Должно выводить:
> Значение счетчика:0
> Значение счетчика:1
> Значение счетчика:2
> Значение счетчика:3
> Значение счетчика:4
> Готово
Так выводит только при выражении cont = cont + 1
При двух плюсах уходит в бесконечность:
Значение счетчика:0
Значение счетчика:0
Значение счетчика:0
Значение счетчика:0
Значение счетчика:0
Значение счетчика:0
Ответы
Ответ 1
Давай сначала. У тебя имеется постинкремент myValue++. В таком случае состояние объекта (переменной) должно измениться, но при этом возвращено предыдущее состояние. Поэтому происходит три операции: сохранение текущего значения во временную переменную (int temp = myValue) инкремент (++myValue) возвращение сохраненного состояния (return temp) то есть схематично: operator++(int) { int temp = myValue; myValue = myValue + 1; return temp; } Таким образом происходят действия и с переменной cont. А так как своё сохранённое состояние temp в итоге возвращается в ту же переменную, то, как результат, в нее всегда записывается ноль. В конце каждой итерации cont равен нулю, условие цикла всегда 0 < 5 и получается бесконечный цикл. Как итог: нужно писать либо просто cont++ либо просто ++cont либо cont = cont + 1. Просто cont++ сработает потому, что оператор отработает, переменная увеличится, а return temp будет делать некуда. Грубо говоря. И всё сработает как надо. Ну или быть немного извращенцем и написать cont = ++cont, т.к. преинкремент вначале увеличивает значение на 1 и потом возвращает.
Комментариев нет:
Отправить комментарий