2016-07-15 19 views
-7

Ich teste eine boolesche Logik und bleibe stecken, wenn ich den logischen Operator in if ändere, wenn Ausdruck von & & zu ||, Programm dann nicht richtig funktioniert und nur die erste Anweisung ausführt, abgesehen davon, welche Eingabe ich verwende. Kann jemand dieses Verhalten erklären?Warum Operator || funktioniert hier nicht?

((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

Post-Scanner-Code. –

+0

Was erwarten Sie von Ihrem Zustand? – SMA

+0

Ihre 'if'-Bedingungen schließen sich gegenseitig aus, da' else if' verwendet wird. Daher wird nur einer, wenn überhaupt, jemals angewendet werden. – Mena

Antwort

2

((gender != 'M' || gender != 'F') || (age < 0)) wird immer wahr sein, da gender nicht nicht M oder nicht F sein kann (wenn es M ist es nicht F, wenn es sich um F nicht M ist).

0

Die Suche nach OR-Bedingungen wird beendet, sobald etwas gefunden wird, das wahr ist - in diesem Fall wird diese Gesamtaussage immer wahr sein, weil sie nicht sowohl 'M' als auch 'F' sein kann.