【问题标题】:Why is my c != 'o' || c != 'x' condition always true? [duplicate]为什么我的 c != 'o' || c != 'x' 条件总是正确的? [复制]
【发布时间】:2016-08-04 23:10:23
【问题描述】:

我有这个循环语句,我将使用类似 C 的语法(C、C++、Java、JavaScript、PHP 等都使用类似的语法)来表达它:

while (c != 'o' || c != 'x') {
    c = getANewValue();
}

我希望它一直运行到我得到'o''x',但它永远不会退出,即使c'o''x'。为什么不呢?

我也尝试过使用if

if (c != 'o' || c != 'x') {
    // Show an error saying it must be either 'o' or 'x'
}

但这也总是显示错误消息,即使c'o''x'。为什么?

【问题讨论】:

    标签: conditional-statements logical-operators logical-or


    【解决方案1】:

    为什么我的c != 'o' || c != 'x' 条件总是为真?

    表达式使用逻辑 OR 运算符 (||) 组合两个子表达式。如果至少有一个子表达式为true,则表达式为true。为了成为false,它连接的两个子表达式都必须是false

    子表达式是c != 'o'c != 'x'

    c == 'o' 时,第一个子表达式c != 'o'false。第二个也是一样;当c == 'x'时是false

    请注意,它们不能同时是false,因为c 不能同时是'o''x'

    【讨论】:

      【解决方案2】:

      条件(c != 'o' || c != 'x') 永远不能为假。如果c'o',那么c != 'x' 将为真并且满足OR 条件。如果c'x',那么c != 'o' 将为真并且满足OR 条件。

      你想要&&(与),而不是||(或):

      while (c != 'o' && c != 'x') {
          // ...
      }
      

      “虽然c 不是'o' 并且c 不是''x'...”(例如,它们都不是)。

      或者使用德摩根定律,covered here

      while (!(c == 'o' || c == 'x')) {
          // ...
      }
      

      “虽然 (c 不是 'o'c 不是 'x')...”

      【讨论】:

        【解决方案3】:

        即使您输入 x 或在这种情况下输入 o,如果条件评估为真,因此 game_start 仍然为假。

        应该是if(c!='o' && c!='x') 或使用更直接的方式

        if(c == 'o' || c == 'x')
           game_start=true;
        else
            System.out.println("you can only enter o or x!");
        

        【讨论】:

          【解决方案4】:

          条件应为if(!(c=='o' || c=='x'))if(c!='o' && c!='x')

          【讨论】:

            【解决方案5】:

            它必须是if(c!='o' && c!='x') 而不是if(c!='o' || c!='x')。如果您使用 or 运算符,则布尔表达式将始终为真。

            【讨论】:

              猜你喜欢
              • 2021-11-09
              • 1970-01-01
              • 2013-02-22
              • 2014-12-02
              • 1970-01-01
              • 1970-01-01
              • 2022-11-10
              • 1970-01-01
              相关资源
              最近更新 更多