Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

cont = cont++ не работает

#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 и потом возвращает.

Комментариев нет:

Отправить комментарий