【问题标题】:Java: Checking contents of char variable with if conditionJava:使用 if 条件检查 char 变量的内容
【发布时间】:2011-01-16 10:32:51
【问题描述】:

我有一个应该包含 Y、y、n 或 N 字符的 char 变量,我想测试它是否不包含它,然后显示错误消息并退出程序。

这是我正在使用的代码;

    if (userDecision != 'Y' || userDecision != 'y' || userDecision != 'n' || userDecision != 'N')
        {
            System.out.println("Error: invalid input entered for the interstate question");
            System.exit(0);
        }

不管变量中有什么,它总是返回true并执行退出程序的命令,我做错了什么?

【问题讨论】:

    标签: java variables conditional char if-statement


    【解决方案1】:

    || 表示逻辑或。你想要&&

    if (userDecision != 'Y' && userDecision != 'y' ...
    

    如果 either a or b 为真,

    a || b 返回真。假设userDecision'Y'。那么

    • userDecision != 'Y' 是假的
    • userDecision != 'y' 是真的
    • userDecision != 'N' 是真的
    • userDecision != 'n' 是真的

    所以条件为真,if 分支一起执行。

    OTOH,a && b 如果 a b 都为真,则返回真,这是您真正需要的。

    【讨论】:

      【解决方案2】:

      大声朗读条件的第一部分:选择与Yy 不同吗?问题是任何字符都不同于Yy。您选择了错误的逻辑运算符 - 如果您想确保用户选择了条件中的字符以外的其他内容,您必须选择 &&,逻辑和:字符是否不同于 Y 也不同于y

      【讨论】:

        【解决方案3】:

        您的条件是“如果这不是 a 或不是 b”,这意味着即使它是 a 或 b,它也将始终为真。您要测试的是“如果这不是(a 或 b)”,那么:

        if (! (userDecision == 'Y' || userDecision == 'y' || userDecision == 'n' || userDecision == 'N')) {
            System.out.println("Error: invalid input entered for the interstate question");
            System.exit(0);
        }
        

        如果您的代码包含这样的条件,并且必须测试许多替代字符,您可以使用 switch 构造,这使得这种情况更容易理解:

        switch (userDecision) {
        case 'y': /*fallthrough*/
        case 'Y':
            // accepted
            break;
        case 'n': /*fallthrough*/
        case 'N':
            // rejected
            break;
        
        default:
            System.out.println("Error: invalid input entered for the interstate question");
            System.exit(0);
        }
        

        【讨论】:

          【解决方案4】:

          将您的 OR 更改为 AND

          或者你可以使用

          (!(userDecision == 'Y' || userDecision == 'y' || userDecision == 'n' || userDecision == 'N'))
          

          这个

          !(A OR B) 
          

          等价于

          !A AND !B
          

          看看Boolean algebra

          德摩根定理

          NOT (P OR Q) = (NOT P) AND (NOT Q) 
          NOT (P AND Q) = (NOT P) OR (NOT Q) 
          

          DeMorgan's Theorem

          【讨论】:

            【解决方案5】:

            您需要使用&& 而不是||。您是在询问这些字符中的“无”是否匹配,而不仅仅是四个字符中的任何一个是否不匹配。 (一个值不能同时是 Y、y、N 和 n。)

            【讨论】:

              猜你喜欢
              • 2020-11-02
              • 2012-01-12
              • 2021-02-11
              • 2014-12-06
              • 2017-09-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多