我在查看此代码中的if语句时遇到了问题:
import java.util.Scanner;
class TrafficSignal2 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
char approachingGreen;
char safeToProceed;
char officerDirectingNotToProceed;
System.out.print("Are you approaching a green light? (Y/N) ");
approachingGreen = keyboard.findWithinHorizon(".", 0).charAt(0);
System.out.print("Is it safe to proceed? (Y/N) ");
safeToProceed = keyboard.findWithinHorizon(".", 0).charAt(0);
System.out.print("Is is a traffic officer directing you not to proceed? (Y/N) ");
officerDirectingNotToProceed = keyboard.findWithinHorizon(".", 0).charAt(0);
if ((approachingGreen == 'Y' || approachingGreen == 'y') &&
(safeToProceed == 'Y' || safeToProceed == 'y') &&
(officerDirectingNotToProceed != 'Y' && officerDirectingNotToProceed != 'y')) {
System.out.println("Go");
} else {
System.out.println("Stop");
}
keyboard.close();
}
}
来源(https://users.drew.edu/bburd/BeginProg/tryitout/Chapter10.html#yesyes)
当我使用||
逻辑运算符而不是<{p>}中的&&
时,为什么代码不起作用?
(officerDirectingNotToProceed != 'Y' && officerDirectingNotToProceed != 'y')
当我使用||
时,它告诉用户“去”&#39;什么时候应该说'停止&#39;正确?
我看错了什么?
谢谢
答案 0 :(得分:0)
(officerDirectingNotToProceed != 'Y' || officerDirectingNotToProceed != 'y')
无论您在true
中存储什么字符,都可以保证评估为officerDirectingNotToProceed
。每个字符不等于Y
或不等于y
。
您的逻辑中隐藏了变量名称中的额外Not
。我会将其更改为officerDirectingToStop
并反转您设置该变量的逻辑。这将简化您解析涉及该变量的表达式的方式。
答案 1 :(得分:0)
基于if语句
(approachingGreen == 'Y' || approachingGreen == 'y')
将返回true
如果Y / y (safeToProceed == 'Y' || safeToProceed == 'y')
将返回true
如果N / n,(officerDirectingNotToProceed != 'Y' && officerDirectingNotToProceed != 'y')
将返回true,但如果Y / y 所以在第三个语句中,我建议你使用||
,因为这是一个OR语句,它告诉如果有一个是真的那么它是真的&&
这是一个AND语句,它告诉我们是否有是假的,那就是假的