1

ループを処理する必要があるかどうかを判断するために、クエリするパラメータに関係なくループに入るように見える単純なループに出くわしました。以下はループです。

  if (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 || result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01 & deviceState == false)
                {

                        deviceState = true;
                        mainUI.setAlarmColour(result, device);

                }

注:最後のパラメーターとして「&」と「&&」を試しましたが、どちらも違いはありません。

このループでは、deviceStateがtrueに設定されている場合でも、ループに入ります。ただし、次のループを使用すると、この問題は停止します。

  if (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 || result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01)
                {
                    if (deviceState == false)
                    {
                        deviceState = true;
                        mainUI.setAlarmColour(result, device);
                    }
                }

この2番目のループは問題を解決し、ループに進まなくなります。つまり、私の関数は呼び出されません。

ここで基本的な何かが欠けていますか?私はmessageBoxesを試し、それがfalseであることを確認しました。期待どおりに返されますが、それでも最初のループに入ります。

4

1 に答える 1

7

最初は、&&すでに試したようです(&ビット演算子です)が、次のように、をグループOR化して、最終的なANDスタンドアロンにする必要があります。

if (
    (result[4] == 0x01 || result[5] == 0x01 || result[6] == 0x01 ||
     result[7] == 0x01 || result[8] == 0x01 || result[9] == 0x01)
   && deviceState == false)
{
    deviceState = true;
    mainUI.setAlarmColour(result, device);
}

deviceState == false単純に変更することもできることに注意してください!deviceState(null許容でない場合bool)。!比較のためにfalseからtrueに反転するので、短いとはいえ、本質的にまったく同じことを言っています。

(醜いフォーマットは無視してください。より明確に表示しようとします)

于 2012-06-06T10:52:14.167 に答える