Java-программа не входит в оператор if

Итак, я делаю игру типа памяти, и проблема в том, что программа не вводит оператор if, хотя я знаю, что проверяемые значения равны, потому что я распечатал оба значения перед оператором if. Они оба равны 1. Я знаю, что утверждение if выполнено / истинно из-за этого. Я знаю, что он не входит в цикл, потому что я помещаю оператор печати в цикл и не вижу, чтобы консоль отображала этот оператор if. Итак, я собираюсь опубликовать небольшой фрагмент кода - кода, который, на мой взгляд, актуален, поскольку люди злятся, если я публикую весь код. Если вам нужен весь код, дайте мне знать, и я отправлю его. В любом случае, я печатаю на своей консоли:

1

1

Обратите внимание на утверждение: «Раунд завершен». нет там, где это должно быть.

Вот код:

else {
    System.out.println(++numberOn);
    System.out.println(currentPattern.size());
    if (++numberOn==currentPattern.size()) {
        System.out.println("Round finished.");
        score++;
        numberOn=0;
        displayPattern();
    }
    else {
        numberOn++;
    }
}

Программа вводит этот большой / первый оператор на 100%, иначе первые 2 оператора не запустились бы. Поэтому мне нужно знать, почему оператор if в строке 4 не выполняется, когда обе стороны равны друг другу. Заранее спасибо.

Между прочим, мой отладчик по какой-то причине не работает, потому что ему не нравится графический интерфейс. Итак, я попробовал использовать отладчик.

Bob G. 14.05.2018 23:20

++ numberOn будет увеличиваться перед использованием переменной.

achAmháin 14.05.2018 23:20

Я знаю, я хочу, чтобы программа сначала увеличивала numberOn, прежде чем проверять, является ли утверждение if истинным или нет.

Bob G. 14.05.2018 23:21

Вы печатаете ++numberOn, который увеличивает его. Затем вы сравниваете его, и оно снова увеличивается. Вы добавляете два к значению.

Silvio Mayolo 14.05.2018 23:21

Я предполагаю, что ваш оператор печати сначала увеличивает его.

achAmháin 14.05.2018 23:22

оператор if на самом деле не увеличивает значение, потому что он в операторе if, как я думал?

Bob G. 14.05.2018 23:23

Когда у вас возникают подобные проблемы, неплохо было бы переместить операции ++ в их собственные операторы. Код не делает того, что вы думаете, поэтому упрощение его до тех пор, пока вы не поймете, что это такое, - хороший способ учиться.

hyde 14.05.2018 23:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

++numberOn не просто возвращает значение numberOn плюс один. Он также увеличивает фактическое значение numberOn. Когда вы выполняете System.out.println(++numberOn), вы добавляете единицу к значению numberOnа также при его печати. Когда вы позже выполняете ++numberOn, вы добавляете еще один к переменной, а затем сравниваете это значение. Так что сделайте numberOn + 1 вместо ++numberOn, если вы на самом деле не иметь в виду, чтобы изменить переменную.

В качестве примечания, вот почему многие люди (включая меня) склонны защищать выполнение операций ++ только на своей собственной линии. Так

++numberOn;
if (numberOn == ...) { ... }

Я предполагаю, что вы скопировали ++numberOn в оператор печати, не думая о последствиях двойного увеличения. Сделать ошибку легко, поэтому выполнение таких операций на собственной линии минимизирует риск и сделает мутацию более очевидной.

Увеличивает ли это значение в операторе if? Затем я удалю оператор печати и посмотрю, что произойдет.

Bob G. 14.05.2018 23:22

Да, это так. Если вы удалите оператор печати, но проблема все еще возникает, значит, здесь что-то еще происходит.

Silvio Mayolo 14.05.2018 23:22

Понятно, я избавился от операторов if, и это частично работает. Теперь я получаю исключение индекса за пределами границ, но я могу это исправить, так как я довольно хорошо понимаю, почему это происходит. Спасибо, и, пожалуйста, проголосуйте за это. Люди уже не понимают, что это просто недопонимание кода. Вы не будете искать что-то в Google, если считаете, что часть кода работает определенным образом, и это должно быть что-то другое.

Bob G. 14.05.2018 23:27

Другие вопросы по теме