Я программировал десятилетиями и использовал много разных языков. В настоящее время я делаю простое Java-приложение для курса Uni. Курсовая работа проста, но у меня возникла проблема с оператором if, который просто не желает выполняться, даже если он соответствует условию.
Я собираюсь признать, что мне немного неловко задавать такой простой вопрос, но это проблема, которую я потратил больше времени, которое, как мне кажется, я пытаюсь решить.
РазрешитьМне бы уточнить:
У меня есть две переменные, одна частная локальная и одна сгенерированная, обе определены как int . _selectedImage и clickedImageID , оба предоставляются функции public void , которая проверяет, совпадают ли они. При первом запуске приложения они будут одинаковыми, каждый раз при запуске функции это не так.
Однако, что бы я ни делал, оно просто не хочет выполнять блок if. Позвольте мне продемонстрировать:
private int _selectedImage;
public void setPuzzlePiece(int clickedImageID) {
// selectedImage == clickedImageID on first run.
Boolean firstRun = (clickedImageID == _selectedImage);
if (firstRun==false) {
// do stuff
String debugPoint = "adding this here just to attach a debug point";
}
}
Я предоставил скриншот из процесса отладки, который выделяет значения:
https://i.imgur.com/ahgNZLP.png
Вы увидите соответствующие значения 4 и 5 , оба int , для clickedImageID и _selectedImage , тогда как firstRun равно false .
Определите, как, несмотря на выполнение условия, отладчик считает, что в строке 77 не найдено исполняемого кода, и, проходя через отладчик, он просто «игнорирует» условие if. Все же мы все можем видеть логику, совершенно ясно, что он должен выполнить блок.
У меня изначально было это как простое сравнение. if (_selectedImage==clickedImageID) { .. }
Но изменили условие на логическое и сравнили с этим. Я также пробовал многочисленные способы обнаружения ложных, такие как (firstRun==false)
, (!firstRun)
и (firstRun==(!true))
среди многих других глупых способов, но это настолько просто, насколько просто может быть, достаточно просто сравнить логическое значение с истинным или ложным.
Если я использую окно оценки, оно возвращает то, что показывает скриншот, что условие блока if выполнено, но оно все равно не будет выполнено.
Это может быть связано с Javaи это сравнения. Поскольку я использую несколько языков, я иногда могу быть пойман с недостатками каждого из них;например, в c # вы можете сравнивать строки через ==, в то время как в Java вы используете equals ().
Это должно быть что-то, что я делаю не так, но я не могу этого увидеть. Помогите мне определить мою глупость ТАК!
- ps: я проверил, является ли это дублирующим вопросом, и хотя несколько потоков относятся к аналогичным, они находятся на PHP или C ++, а не на Java, иJava - это простая синтаксическая ошибка, которая их подвела. Это, как я вижу, не проблема здесь. *
Заранее спасибо.