Intereting Posts
Android Studio: Theme.Sherlock.Light.DarkActionBar не может быть разрешен Прокрутка и события OnClick в RecyclerView Как сделать анимацию ViewSwitcher Android SQL: проверьте, существует ли запись в базе данных Как реализовать панель инструментов Android на панели инструментов Получить выбранный элемент с помощью флажка в Listview Отображение «справки» поверх макета Android Управление ресурсами между версией рабочего стола и устройства в libgdx Декодер RecyclerView добавляет дополнительные дополнения при обновлении Как преобразовать из форматированной строки с фраз в десятичную или Float в Java? Action Bar Шерлок 4 цвет текста заголовка – где я иду не так? Android-разрешения: как я могу узнать, что опасно против нормального? Как получить разрешение экрана в Android Honeycomb? Как подключить приложение Android к удаленной базе данных? UIL, Picasso – изображения в адаптере всегда перезагружаются при остановке прокрутки

Утверждение IF просто не работает

Я пишу приложение для Android, которое делает много всего. Недавно я реорганизовал свой код, чтобы иметь лучшую структуру, но внезапно у меня возникает очень странная проблема.

handleRequest(String str) { boolean foo = executeCommand(str); this.publishProgress("FOO1: " + foo); if (foo == false); { this.publishProgress("FOO2: " + foo); sendString("Failed to execute: " + str); } this.publishProgress("FOO3: " + foo); sendEOM(); } 

Приведенный выше код должен выполнить команду и сохранить «foo», если команда была выполнена правильно. Этот код находится внутри Android AsyncTask (поток), поэтому я использую «publishProgress», чтобы показать тост.

Я просматриваю отладчик, а FOO – это правда! Тосты показывают, что FOO может быть правдой и на всем пути. Однако он идет вперед и прыгает внутри блока IF и выполняет это тоже. Я никогда не видел этого раньше, я думаю, что это проблема с Java. Я выполнял операцию «executeCommand», и похоже, что она также пропускает операторы return.

Я запускаю код на виртуальном устройстве и реальный, и они оба это делают.

Есть идеи? Я здесь совершенно не понимаю.

Solutions Collecting From Web of "Утверждение IF просто не работает"

Ты сказал

  if (foo == false); 

Удалите точку с запятой, она должна быть

  if (foo == false) {//your code} 

Удалить точку с запятой: if (foo == false); -> if (foo == false)

Вы ставите точку с запятой после if .

Таким образом, ваш оператор if существует сам по себе, и следующий блок кода всегда работает.

Измените свой код следующим образом:

 handleRequest(String str) { boolean foo = executeCommand(str); this.publishProgress("FOO1: " + foo); if (foo == false) { this.publishProgress("FOO2: " + foo); sendString("Failed to execute: " + str); } this.publishProgress("FOO3: " + foo); sendEOM(); } 

NB
Сохранение брекетов с открыванием блока в той же строке, что и определение функции / условия цикла, делает такие ошибки намного менее частыми, ИМО.

Здесь не будет ";" Точка с запятой после if.

Поэтому вместо if (foo == false); Это должно быть, если (foo == false){}

Если вы пишете точку с запятой (;) после того, как оператор if завершает условие if там! Вам нужно запустить блок кода после записи, если условие ie

 if(foo == false){ // block of Code } //end of if condition 

Я не знаю, как эта строка компилируется if (foo == false); , Но, очевидно, это так. Вам нужно удалить точку с запятой в конце строки, как упомянули другие. С; Там это означает ничего не делать, если foo ложно. Затем программа переходит в следующий блок между двумя фигурными фигурными скобками. Вам необходимо установить findbugs или PMD, чтобы предупредить об этом опечатках.