2012-07-17 11 views
9

私はたくさんのことをするアンドロイドアプリを書いています。私は最近、コードをリファクタリングして構造を改善しましたが、突然私は非常に奇妙な問題を抱えています。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'を踏んでいて、リターン文もスキップしているように見えます。

仮想デバイスと実際のデバイスでコードを実行しましたが、どちらもこれを行います。

アイデア?私は完全にここに迷っています。あなたはif文の後にセミコロンを置く>if (foo == false)

+0

は、if文 –

+1

なく、あなたの問題はなく、代わりに ''(もし!FOO)を使用するクリーナーと明確にした後、セミコロンを削除した場合、書き込み後のコードのブロックを開始する必要があります。 – dimo414

+0

@ dimo414私はこれを投稿した時点で不満を抱いていたので、それを「FOO == FALSE」に変更しました。 – yellow

答えて

22

、それはセミコロンを削除

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

ああ、私は馬鹿のように感じる。私はそのセミコロンを見逃したとは思えません!私は 'executeCommand'をデバッグするのに多くの時間を費やしました。問題はそこにあると思っていました...とにかく、私にそれを見つけてくれてありがとう! – yellow

9

でなければなりません。

このように、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.
ブロック定義のカッコを関数定義/ループ条件と同じ行に置いておくことで、これらの種類の間違いをはるかに少なくすることができます。

9

からif (foo == false);:あなたは

if (foo == false); 

は、セミコロンを削除した

4

";" if文の後のセミコロン。

ので、代わりの(foo == false){}

1

が、私はこの行はif (foo == false);をコンパイルする方法を知りませんが、明らかにそれがない場合はそれがあるべき(foo == false);場合。他の人が触れているように、行末のセミコロンを削除する必要があります。とともに ; fooがfalseの場合は何もしません。次に、プログラムは2つの中括弧の間の次のブロックに入ります。 この種の誤植に対して警告するには、findbugsまたはPMDをインストールする必要があります。

2

if文の後にセミコロン(;)を書くと、if条件が終了します! あなたは条件すなわち

if(foo == false){ 

// block of Code 

} //end of if condition 
関連する問題