1

検証関数でIf-Elseステートメントを使用していました。すべての検証関数を含む検証クラスがあり、Validationクラスのオブジェクトを介してこれらのメソッドにアクセスしました。何が起こったのかというと、コントロールは両方の条件の内側に入っていたということです

if(some cond ..)
System.out.println("inside IF");
else
System.out.println("inside ELSE");

私も試しました

if(some cond ..)
{
System.out.println("inside IF");
}
else
{
System.out.println("inside ELSE");
}

どちらの場合も、コントロールは両方の条件の内側に入り、両方の行を印刷していました。これを自分自身に説明することはできませんでした。これが構文エラーでない場合は、どのような条件を指定しても、ループのいずれかでのみ実行され、両方では実行されません。

誰もが実行されているifとelseの両方の条件がどのように可能であるかを説明できますか?

私は自分のプロジェクトに他の無関係な変更を加え、しばらくするとそれはうまく機能していましたが、そのとき私はそれがどのように可能であったかを自分自身に説明することができませんでした

ところで、それが重要な場合、私はアンドロイドプロジェクト内でこのクラスを使用していたので、アンドロイドコンパイラが使用されていました

4

3 に答える 3

5

ループではなく、if-else条件ステートメントを意味します。

スレッドの問題のようです。おそらく、あるルートをたどるスレッドがあり、別のルートが同じメソッドを呼び出して別のパスをたどっています。これは、両方の文字列を表示する方法です。

これをデバッグするためにThread.currentThread()、各System.out.println呼び出しの最後に印刷することができます。Threadさまざまなオブジェクトアドレスが表示されると確信しています。

于 2012-11-14T11:15:01.520 に答える
0

グーガーにとってはここで終わります。AndroidのJavaでも同じ状況に遭遇しました。

私の場合(まったく同じコードではありません);

int state = 1;
if(state == 1)
{
    //invokes here
    state = 3;
}
else if(state==2){}
else if (state ==3)
{
    //invokes here too
}

問題は、これが「タッチ」のようなイベントで実行される場合です。複数回実行される場合があります。上記のコードの2回目の呼び出しは、明らかにコードの状態==3の部分を実行します。これを回避するには、クリックイベント、または最初のタッチ後の短時間のタッチイベントを無視するタイマーを使用する必要があります。

于 2013-08-01T02:22:13.627 に答える
0

これが流れの問題です。forループ内でif-elseを使用したときにも同じ問題が発生しました。実際には、最初にifブロックを実行していましたが、2回目はif条件が満たされていないため、elseブロックを実行していました。ここで、if-else内部ループを使用している場合は、breakステートメントを使用します

于 2018-08-01T16:30:28.420 に答える