IF声明不起作用

时间:2012-07-17 15:41:45

标签: java android return

我正在编写一个能够完成很多工作的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语句。

我已经在虚拟设备和真实设备上运行了代码,他们都这样做了。

有什么想法吗?我在这里完全不知所措。

6 个答案:

答案 0 :(得分:22)

你说

 if (foo == false);

删除分号,应该是

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

答案 1 :(得分:9)

删除分号:if (foo == false); - > if (foo == false)

答案 2 :(得分:9)

您在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();
}

N.B。
将你的块开口括号保持在与函数定义/循环条件相同的行中会使这些错误更加频繁,IMO。

答案 3 :(得分:4)

没有“;” if语句后的分号。

因此(foo == false);取代(foo == false){}而不是{{1}}

答案 4 :(得分:3)

如果你在if语句之后写了分号(;),它就会结束if条件! 如果条件,即你需要在写入后开始一段代码

if(foo == false){

// block of Code

} //end of if condition

答案 5 :(得分:1)

我不知道这一行如何编译if (foo == false);,但显然它确实如此。您需要像其他人提到的那样删除行尾的分号。随着;如果foo是假的,那就意味着什么都不做。然后程序进入两个花括号之间的下一个块。 你需要安装findbugs或PMD来警告这种拼写错误。