Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用if条件检查char变量的内容_Java_Variables_Conditional_Char_If Statement - Fatal编程技术网

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

Java:使用if条件检查char变量的内容,java,variables,conditional,char,if-statement,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 intersta

我有一个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并执行命令退出程序,我做错了什么?

您需要使用&&而不是| |。您要问的是这些字符是否都不匹配,而不仅仅是四个字符中是否有一个不匹配。值不能同时为Y、Y、N和N。

| |表示逻辑或。您需要&&而不是

如果a或b为真,则a | | b返回真。假设userDecision为“Y”。然后

用户决定!='是假的 用户决定!='是真的 用户决定!='是真的 用户决定!='是真的 因此,条件一起为true,if分支被执行


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

大声朗读条件的第一部分:选择与Y或Y不同吗?问题是任何字符都不同于Y或Y。您选择了错误的逻辑运算符–如果要确保用户选择的不是条件中的字符,则必须选择&&,逻辑and:字符是否与Y不同,是否也与Y不同,等等。

将yoiur OR更改为ANDs

或者你可以用

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

相当于

!A AND !B
看看

德摩根定理


你的条件是,如果这不是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);
}
NOT (P OR Q) = (NOT P) AND (NOT Q) 
NOT (P AND Q) = (NOT P) OR (NOT Q) 
if (! (userDecision == 'Y' || userDecision == 'y' || userDecision == 'n' || userDecision == 'N')) {
    System.out.println("Error: invalid input entered for the interstate question");
    System.exit(0);
}
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);
}