if() 语句行为,为什么这会传递到循环中

本文关键字:循环 为什么 语句 if | 更新日期: 2023-09-27 18:36:20

我遇到了一个简单的循环,它似乎进入循环,而不管我查询的参数如何,以确定循环是否应该处理。下面是循环;

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

第二个循环解决了问题,它不再进入循环,这意味着我的函数不会被调用。

我在这里错过了一些基本的东西吗?我已经尝试了 messageBox 来验证它是假的,并且它们以我期望的方式返回,但它仍然进入第一个循环。

if() 语句行为,为什么这会传递到循环中

首先,

&&就像你已经尝试过一样(&是一个按位运算符),但你应该将你的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(如果它是不可为空的bool)。 !在比较中将错误翻转为真,因此您基本上在说完全相同的事情,尽管更短。

(请忽略丑陋的格式,只是想让它更清晰地显示)