IF 语句不起作用

Posted

技术标签:

【中文标题】IF 语句不起作用【英文标题】:IF statement is just not working 【发布时间】:2012-07-16 14:01:49 【问题描述】:

我正在编写一个做很多事情的安卓应用。我最近重构了我的代码以获得更好的结构,但突然我遇到了一个非常奇怪的问题。

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”,看起来它也在跳过返回语句。

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

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

【问题讨论】:

去掉if语句后的分号 不是您的问题,而是使用if (!foo) 更简洁明了。 @dimo414 是的,当我发布这篇文章时,我感到很沮丧,所以我把它改成了“FOO == FALSE”,这样它就很明确了,我看不出有什么问题。 【参考方案1】:

你说

 if (foo == false);

去掉分号,应该是

 if (foo == false) //your code

【讨论】:

天哪,我觉得自己像个白痴。我不敢相信错过了那里的分号!我花了很多时间调试“executeCommand”,以为问题出在那儿……无论如何,感谢您为我发现了这一点!【参考方案2】:

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

【讨论】:

【参考方案3】:

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

注意 IMO,将块打开大括号与函数定义/循环条件保持在同一行可以减少此类错误的发生率。

【讨论】:

【参考方案4】:

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

所以应该是 if (foo == false); 而不是 if (foo == false)

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

if(foo == false)

// block of Code

 //end of if condition

【讨论】:

以上是关于IF 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

IF 语句不起作用

为啥这个 VBA if 语句不起作用?

为啥这个 IF NOT EXISTS 语句不起作用?

if 循环中的语句不起作用

基本的 If else 语句在 javascript 中不起作用

else 在 if 语句中不起作用