Java:使用 if 条件检查 char 变量的内容

Posted

技术标签:

【中文标题】Java:使用 if 条件检查 char 变量的内容【英文标题】:Java: Checking contents of char variable with if condition 【发布时间】: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并执行退出程序的命令,我做错了什么?

【问题讨论】:

【参考方案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。)

【讨论】:

以上是关于Java:使用 if 条件检查 char 变量的内容的主要内容,如果未能解决你的问题,请参考以下文章

带有 if 条件的内连接

如何在if条件语句中搜索char数组中的char

用于检查 char 数组是不是包含 Java 中用户给定字母的 if 语句

如果我想使用 char 检查 Java 中的特殊字符怎么办?

java中的if条件是不是可以用变量来判断

java中的if条件是不是可以用变量来判断