2014-04-15 7 views
19

L'errore mostra questa lineatipi di operando male per operatore binario "e" Java

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

Questo è il codice intero:

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"); 
    } 
} 
} 

ho corretto il codice:

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

Era un problema con le parentesi, aggiornato per chiunque in futuro.

risposta

34

== ha priorità più alta di &. Si consiglia di avvolgere le operazioni in () per specificare la propria priorità.

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

Analogamente per tutte le parti della condizione if.

0

Devi essere più preciso, usando le parentesi, altrimenti Java non userà l'ordine degli operandi che vuoi che usi.

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

Diventa

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

Poiché & ha una priorità inferiore di ==.

Il codice è equivalente al a[0] & (1 == 0), ed a meno che a[0] è un valore booleano questo non compilerà ...

è necessario:

(a[0] & 1) == 0 

ecc ecc

(sì, Java hava un operatore booleano & - un collegamento non logico e)

+0

Che cosa significa 'una scorciatoia logica e'? – Colas