2016-07-15 83 views
-7

我正在测试一些布尔逻辑,并且当我首先更改逻辑运算符(如果表达式从& & ||)时,卡住了,程序工作不正常,然后只执行第一条语句,而不是使用哪个输入。有人可以解释这种行为吗?为什么运营商||不在这里工作?

((gender != 'M' || gender != 'F') || (age < 0)) 

    public static void main(String[] args) 
    { 
    char gender = 'W'; 
    int age = 0; 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Type gender: "); 
    gender = scan.nextLine().charAt(0); 
    System.out.println("Type age: "); 
    age = scan.nextInt(); 

    if((gender != 'M' && gender != 'F') || (age < 0)) 
    { 
    System.out.println("Error in typed values"); 
    } 
    else if((gender == 'M') && (age < 18)) 
    { 
    System.out.println("Boy"); 
    } 
    else if((gender == 'M') && (age >= 18)) 
    { 
    System.out.println("Man"); 
    } 
    else if((gender == 'F' && age < 18)) 
    { 
    System.out.println("Girl"); 
    } 
    else if((gender == 'F' && age >= 18)) 
    { 
    System.out.println("Woman"); 
    } 
} 
}   
+0

后置扫描仪代码。 –

+0

你期望你的状况应该是什么? – SMA

+0

由于使用else if,所以'if'条件全部互斥。因此,只有一个如果有的话将适用。 – Mena

回答

2

((gender != 'M' || gender != 'F') || (age < 0))永远是正确的,因为gender不能 M或 F(如果它是M是不男,如果是F它不是M)。

0

检查OR条件会在它发现某些事情是真实的时候立即停止 - 因此在您的情况下,总体说明将始终为真,因为它不能同时为'M'和'F'。