2014-04-15 4 views
19

Der Fehler Diese Zeile zeigtschlecht Operandentypen für binäre Operator "&" java

if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){ 

Dies ist der gesamte Code:

public class Ex4 { 

    public static void main(String[] args) { 
    int [] a = new int [3]; 
    if(args.length == 3) 
    { 
     try{ 
     for(int i = 0; i < args.length; i++) 
     { 
     a[i] = Integer.parseInt(args[i]); 
     } 
     } 
     catch(NumberFormatException e){ 
      System.out.println("Wrong Argument"); 
     } 
     if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){ 
     System.out.println("yes"); 
     } 
    else { 
     System.out.println("no"); 
    } 
    } 
    else{ 
     System.out.println("Error"); 
    } 
} 
} 

ich den Code festgelegt haben:

if ((a[0] & 1) == 0 && (a[1] & 1) == 0 && (a[2] & 1) == 0){ 

War ein Problem mit den Klammern, für jeden in der Zukunft aktualisiert.

Antwort

34

== hat höhere Priorität als &. Möglicherweise möchten Sie Ihre Operationen in () umschließen, um Ihre eigene Priorität anzugeben.

((a[0] & 1) == 0) 

Ähnlich für alle Teile der if Zustand.

0

Sie müssen präziser sein, indem Sie Klammern verwenden, andernfalls wird Java nicht die Reihenfolge der Operanden verwenden, die Sie verwenden möchten.

if ((a[0] & 1 == 0) && (a[1] & 1== 0) && (a[2] & 1== 0)){ 

Wird

if (((a[0] & 1) == 0) && ((a[1] & 1) == 0) && ((a[2] & 1) == 0)){ 
3

Da & eine weniger Priorität als == hat.

Ihr Code zu a[0] & (1 == 0) äquivalent ist, und es sei denn, a[0] ist ein boolean nicht kompilieren ...

Sie müssen:

(a[0] & 1) == 0 

etc etc.

(ja, Java hat einen booleschen & Operator - eine nicht-Verknüpfung logisch und)

+0

Was bedeutet "eine Abkürzung logisch und"? – Colas

Verwandte Themen