if语句的初学者问题

时间:2018-04-19 19:18:56

标签: java if-statement

我在查看此代码中的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;正确?

我看错了什么?

谢谢

2 个答案:

答案 0 :(得分:0)

(officerDirectingNotToProceed != 'Y' || officerDirectingNotToProceed != 'y')
无论您在true中存储什么字符,

都可以保证评估为officerDirectingNotToProceed。每个字符不等于Y 不等于y

您的逻辑中隐藏了变量名称中的额外Not。我会将其更改为officerDirectingToStop并反转您设置该变量的逻辑。这将简化您解析涉及该变量的表达式的方式。

答案 1 :(得分:0)

基于if语句

    如果Y / y ,
  1. (approachingGreen == 'Y' || approachingGreen == 'y')将返回true 如果Y / y
  2. (safeToProceed == 'Y' || safeToProceed == 'y')将返回true 如果N / n,
  3. (officerDirectingNotToProceed != 'Y' && officerDirectingNotToProceed != 'y')将返回true,但如果Y / y
  4. 则返回false

    所以在第三个语句中,我建议你使用||,因为这是一个OR语句,它告诉如果有一个是真的那么它是真的&&这是一个AND语句,它告诉我们是否有是假的,那就是假的