2014-04-15 82 views
19

錯誤顯示此行不好操作類型爲二進制運算符 「&」 的Java

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

這是整個代碼:

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

我已經固定的代碼:

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

括號中的問題,未來任何人都會更新。

回答

34

==具有更高的優先級比&。您可能想要在()中包裝您的操作以指定您自己的優先級。

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

類似地對於if條件的所有部分。

0

您必須更加精確,使用圓括號,否則Java將不會使用您希望它使用的操作數的順序。

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

變爲

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

由於&具有比==一個較小優先級。

您的代碼就相當於a[0] & (1 == 0),除非a[0]是一個布爾值,這將無法編譯...

您需要:

(a[0] & 1) == 0 

等等等等

(是的, Java有一個布爾操作符& - 非快捷鍵邏輯和)

+0

什麼意思'非快捷方式邏輯和? – Colas

相關問題