Итак, я делаю игру типа памяти, и проблема в том, что программа не вводит оператор 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 не выполняется, когда обе стороны равны друг другу. Заранее спасибо.
++ numberOn будет увеличиваться перед использованием переменной.
Я знаю, я хочу, чтобы программа сначала увеличивала numberOn, прежде чем проверять, является ли утверждение if истинным или нет.
Вы печатаете ++numberOn, который увеличивает его. Затем вы сравниваете его, и оно снова увеличивается. Вы добавляете два к значению.
Я предполагаю, что ваш оператор печати сначала увеличивает его.
оператор if на самом деле не увеличивает значение, потому что он в операторе if, как я думал?
Когда у вас возникают подобные проблемы, неплохо было бы переместить операции ++ в их собственные операторы. Код не делает того, что вы думаете, поэтому упрощение его до тех пор, пока вы не поймете, что это такое, - хороший способ учиться.




++numberOn не просто возвращает значение numberOn плюс один. Он также увеличивает фактическое значение numberOn. Когда вы выполняете System.out.println(++numberOn), вы добавляете единицу к значению numberOnа также при его печати. Когда вы позже выполняете ++numberOn, вы добавляете еще один к переменной, а затем сравниваете это значение. Так что сделайте numberOn + 1 вместо ++numberOn, если вы на самом деле не иметь в виду, чтобы изменить переменную.
В качестве примечания, вот почему многие люди (включая меня) склонны защищать выполнение операций ++ только на своей собственной линии. Так
++numberOn;
if (numberOn == ...) { ... }
Я предполагаю, что вы скопировали ++numberOn в оператор печати, не думая о последствиях двойного увеличения. Сделать ошибку легко, поэтому выполнение таких операций на собственной линии минимизирует риск и сделает мутацию более очевидной.
Увеличивает ли это значение в операторе if? Затем я удалю оператор печати и посмотрю, что произойдет.
Да, это так. Если вы удалите оператор печати, но проблема все еще возникает, значит, здесь что-то еще происходит.
Понятно, я избавился от операторов if, и это частично работает. Теперь я получаю исключение индекса за пределами границ, но я могу это исправить, так как я довольно хорошо понимаю, почему это происходит. Спасибо, и, пожалуйста, проголосуйте за это. Люди уже не понимают, что это просто недопонимание кода. Вы не будете искать что-то в Google, если считаете, что часть кода работает определенным образом, и это должно быть что-то другое.
Между прочим, мой отладчик по какой-то причине не работает, потому что ему не нравится графический интерфейс. Итак, я попробовал использовать отладчик.