9

我正在编写一个可以做很多事情的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”,看起来它也在跳过返回语句。

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

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

4

6 回答 6

22

你说

 if (foo == false);

去掉分号,应该是

 if (foo == false) {//your code}
于 2012-07-17T15:42:52.190 回答
9

去掉分号:if (foo == false);->if (foo == false)

于 2012-07-17T15:43:18.427 回答
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();
}

NB
保持你的块打开大括号与函数定义/循环条件在同一行可以减少这类错误的频率,IMO。

于 2012-07-17T15:43:48.360 回答
4

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

所以而不是如果(foo == false); 它应该是如果(foo == false){}

于 2012-07-17T15:55:53.770 回答
4

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

if(foo == false){

// block of Code

} //end of if condition
于 2013-08-20T21:08:05.910 回答
1

我不知道这条线是如何编译if (foo == false);的,但显然它确实如此。正如其他人所提到的,您需要删除行尾的分号。与 ; 如果 foo 为假,则意味着什么也不做。然后程序进入两个大括号之间的下一个块。您需要安装 findbugs 或 PMD 来警告这种错别字。

于 2012-09-02T19:06:17.960 回答