2012-07-17 155 views
9

我正在寫一個做了很多東西的android應用程序。我最近重構了我的代碼以獲得更好的結構,但突然間我遇到了一個非常奇怪的問題。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(); 
} 

上面的代碼應該執行一個命令,並在命令執行正確的情況下存儲'foo'。此代碼位於Android AsyncTask(線程)內,因此我使用「publishProgress」顯示敬酒。

我一直在翻閱調試器,FOO是真的!敬酒表明FOO在整個過程中都是真實的。然而,它繼續前進並在IF塊內跳轉並執行。我從來沒有見過這個,我認爲它是Java的一個問題。我正在執行函數'executeCommand',看起來它也在跳過返回語句。

我已經在虛擬設備上運行了代碼,並且它們都是這樣做的。

任何想法?我在這裏完全不知所措。

+0

刪除if語句 – 2012-07-17 15:43:41

+1

不是你的問題後,分號,但更清潔,更清晰的使用'如果(!FOO)'來代替。 – dimo414 2012-07-17 16:11:11

+0

@ dimo414對,當我發佈這個時候,我感到很沮喪,所以我把它改成了「FOO == FALSE」,這樣就可以清楚地看到我看不到任何錯誤。 – yellow 2012-07-17 17:09:15

回答

22

你說

if (foo == false); 

刪除分號,它應該是

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

哦,我覺得自己像個白癡。我不能相信在那裏錯過了那個分號!我花了很多時間調試'executeCommand',認爲問題出現在那裏......無論如何,感謝您爲我發現! – yellow 2012-07-17 15:50:13

9

刪除分號:if (foo == false); - >if (foo == false)

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

注:
將塊打開的花括號與函數定義/循環條件保持在同一行中,使得這類錯誤更加頻繁,IMO。

4

不會有「;」 if語句之後的分號。

所以不是如果(foo == false);它應該是,如果(foo == false){}

1

我不知道這怎麼行編譯if (foo == false);,但顯然它。您需要像其他人提到的那樣,在行末刪除分號。隨着;如果foo是假的,那麼這意味着什麼都不做。然後程序進入兩個花括號之間的下一個塊。 您需要安裝findbugs或PMD來警告這種打字錯誤。

2

如果你在if語句後面寫分號(;),那麼if語句結束! 你需要寫如果條件之後開始的代碼塊,即

if(foo == false){ 

// block of Code 

} //end of if condition