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

256
21 августа 2017, 08:11

Не работает выражение 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
Answer 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 и потом возвращает.

READ ALSO
Как получить data feed?

Как получить data feed?

ЗдравствуйтеЕсть, к примеру, такой url http://quote

253
Как в String заменить выборочные слова другим цветом

Как в String заменить выборочные слова другим цветом

Хочу написать метод который будет проверять два String на идентичностьПервый String будет содержать правильный ответ, а второй будет частично...

272
Ошибка при конвертации JSON в ArrayList

Ошибка при конвертации JSON в ArrayList

Я пытаюсь передать ArrayList стороннего класса в JSON для сохранения в sharedPreferences, а потом получить его обратноКонвертация списка в JSON происходит...

333
Как обработать пустую ячейку DATETIM

Как обработать пустую ячейку DATETIM

Есть таблица в базе mysql, в которой есть поле DATETIMEЭто поле может быть null

299