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】:大声朗读条件的第一部分:选择与Y
或y
不同吗?问题是任何字符都不同于Y
或y
。您选择了错误的逻辑运算符 - 如果您想确保用户选择了条件中的字符以外的其他内容,您必须选择 &&
,逻辑和:字符是否不同于 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 变量的内容的主要内容,如果未能解决你的问题,请参考以下文章
用于检查 char 数组是不是包含 Java 中用户给定字母的 if 语句