【问题标题】:If statements and && or ||if 语句和 && 或 ||
【发布时间】:2016-02-22 05:02:59
【问题描述】:

好吧,我是 C# 的初学者,但我无法理解下面的 if 语句。

对于此示例,INumber 声明为 8,dPrice 为 0,dTAX 为 10。

        if (iNumber != 8 || iNumber != 9)
        {
            dPrice = dPrice + dTAX;
        }

有人可以解释为什么它要输入语句并将 dTAX 中的 10 添加到 dPrice 中吗?

我知道将其更改为 && 可以,但是为什么呢?

据我了解,它应该只输入 If 语句,如果 iNumber 不等于 8 或 9,这里是这样,所以它不应该输入。

这是我通过 || 运行后的输出if 语句。

        Inumber is: 8

        dPrice was: 0
        dPrice is now: 10

        dTAX is: 10

谁能给我解释一下?

【问题讨论】:

  • 因为你的号码是 8,那么你的程序会读取 inumber !=8 将返回为 false 并且 inumber !=9 将返回为 true。但是你正在使用 || 所以,其中一个是 true dprice 也会更新
  • 它进入if只是因为它是一个真实的陈述8 != 8 or 8 != 9
  • if (false OR true) == true,所以进入区块。
  • 顺便说一下,调试的时候你可以在if里面设置一个断点,然后把鼠标悬停在||部分,这会告诉你为什么进入block,结果整个 if 语句。
  • 我的口袋里有两枚美国标准硬币。他们增加了三十美分。其中一个不是四分之一。硬币是什么?既然您知道问题的答案,您应该能够回答这个难题了。

标签: c# if-statement logical-operators


【解决方案1】:

进入语句是因为语句在计算 iNumber != 9 时为真

安||如果任何语句为真,则 if 中的(或运算符)为真。

这样想..

8 != 8 is False
8 != 9 is True

if ( False || True )
{
    //Do Stuff
}

【讨论】:

  • 感谢大家的回答,我的问题是我看不出 !=8 && != 9 怎么可能是真的,我没有考虑逻辑,因为我只使用了 1变量,但无论如何我现在明白了。
【解决方案2】:

此代码中的if 条件将始终评估为true

if (iNumber != 8 || iNumber != 9)

iNumber8时,不等于9,所以第二部分是true。当iNumber9时,不等于8,所以第一部分为true。其他的,双方都是true|| 条件导致 true 任一侧为 true。这不可能是false。你想要&&而不是||

if (iNumber != 8 && iNumber != 9)

或者你可以使用DeMorgan's Law 得到这个:

if (! (iNumber == 8 || iNumber == 9))

【讨论】:

    【解决方案3】:

    如果 iNumber 不等于 8 或者如果 iNumber 不等于 9,它应该只进入 If 语句。它不等于 9,所以它会进入

    【讨论】:

      【解决方案4】:

      语句在逻辑上等价于

          if (!(iNumber == 8 && iNumber == 9))
          {
              dPrice = dPrice + dTAX;
          }
      

      这总是正确的,因为一个数字不能同时是 8 和 9。

      你想要:

          if (iNumber != 8 && iNumber != 9)
          {
              dPrice = dPrice + dTAX;
          }
      

          if (!(iNumber == 8 || iNumber == 9))
          {
              dPrice = dPrice + dTAX;
          }
      

      逻辑上对你更有意义的那个。

      【讨论】:

        【解决方案5】:

        逻辑与 (&&)

        逻辑与运算符 (&&) 如果两个操作数都为真,则返回布尔值真,否则返回假。在计算之前,操作数被隐式转换为 bool 类型,结果是 bool 类型。逻辑 AND 具有从左到右的结合性。

        逻辑或 (||)

        如果一个或两个操作数为真,逻辑或运算符 (||) 返回布尔值真,否则返回假。在计算之前,操作数被隐式转换为 bool 类型,结果是 bool 类型。逻辑 OR 具有从左到右的关联性。

        如果你有:

        bool someVariable = true;
        bool someOtherVariable = false;
        
        if ((someVariable == true) && (someOtherVaribale == true))
        {
            //This code will be executed
        }
        
        if ((someVaribale == true) || (someOtherVariable == true))
        {
            //This code will be executed
        }
        

        【讨论】:

          【解决方案6】:

          您正在使用|| (Logical OR),如果任何操作数为真,则其计算结果为真。因此,您的第一个条件 (iNumber != 8) 为假,但第二个条件 (iNumber != 9) 为真,因此总体结果为真。

          它与&& 一起工作的原因是AND 运算符要求两个操作数都为真,才能评估为真。如果其中一个操作数为假,则整体结果为假。

          你应该看到:Truth Tables, Logic, and DeMorgan's Laws

          【讨论】:

            【解决方案7】:

            || OR 运算符意味着只有一个 OR 另一个必须为真。在本例中,iNumber != 9,因此该部分代码为真并进入语句。我想你会想要使用 && AND 运算符来指示它不能是 8 并且不能是 9。

            【讨论】:

              【解决方案8】:

              在英语中,这读作:如果 iNumber 不是 8 或 iNumber 不是 9。 iNumber 是 8,而不是 9(您的第二次检查),因此它会落入 if 块。

              您正在描述一个不等于 8 且不等于 9 的 AND 条件。

              【讨论】:

                【解决方案9】:

                使用

                if (iNumber != 8 && iNumber != 9)
                

                这意味着“如果 iNumber 不等于 8 并且 iNumber 不等于 9”。您的声明:

                if (!Number != 8 || iNumber != 9)
                

                表示“如果 !iNumber 不等于 8 或 iNumber 不等于 9”,只要 iNumber 不等于其中一个值就为真,并且因为它只能保存一个值而不是同时保存两个,这句话永远是正确的。

                【讨论】:

                  【解决方案10】:

                  它应该只输入 If 语句,如果 iNumber 不等于 8 或 9

                  那就是:

                  if (!(iNumber == 8 || iNumber == 9))
                  ...
                  

                  【讨论】:

                  • 这如何回答为什么? Can somebody explain why it is entering the statement and adding the 10 from dTAX to dPrice?
                  • 这就是 OP 的意思。他写下了他的台词,并没有注意到这是他的意思。 OP 确实理解 OR 和 AND 的概念。他只是有一个简单的逻辑错字。
                  • 这确实解决了问题
                  • 它解决了问题..哪个没有回答问题..如果你问你的教授为什么,他们只是给你这个,你会觉得你的问题已经回答了吗?
                  • @User42 很公平,这个网站的人太挑剔了
                  【解决方案11】:

                  以下来自MSDN

                  条件或运算符 (||) 对其布尔值执行逻辑或 操作数。如果第一个操作数的计算结果为真,则第二个操作数 不评估。如果第一个操作数的计算结果为假,则第二个 运算符确定整个 OR 表达式是否计算为 真假。

                  在您的示例中,第一个条件 (!=8) 为假,因为 iNumber = 8,但第二个条件 (!=9) 为真。所以这就是它进入大括号的原因。

                  如果你说 !=8 && !=9,它不会进入大括号,因为它不满足这两个条件。

                  【讨论】:

                    【解决方案12】:

                    维护大型网站的菜单既困难又耗时。

                    在 ASP.NET 中,菜单可以存储在文件中以便于维护。该文件通常称为 web.sitemap,存储在 web 的根目录中。

                    此外,ASP.NET 新增了三个导航控件:

                    动态菜单 树视图 站点地图路径

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-03-02
                      • 2016-02-29
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多