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

时间:2010-02-13 07:04:56

标签: java variables conditional char if-statement

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

这是我正在使用的代码;

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

无论变量中的内容是什么,它总是返回true并执行退出程序的命令,我做错了什么?

5 个答案:

答案 0 :(得分:3)

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

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

如果 b为真,则

a || b返回true。假设userDecision'Y'。然后

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

因此,条件为真,并执行if分支。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

将yoiur OR更改为ANDs

或者你可以使用

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

!(A OR B) 

等同于

!A AND !B

查看Boolean algebra

De Morgans定理

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

DeMorgan's Theorem

答案 3 :(得分:2)

你的条件是“如果这不是或不是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 :(得分:1)

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