2014-04-15 21 views
19

Các lỗi cho thấy dòng nàyloại toán hạng xấu cho nhà điều hành nhị phân "&" java

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

Đây là toàn bộ mã:

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

Tôi đã khắc phục các mã:

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

Đã xảy ra sự cố với các dấu ngoặc, được cập nhật cho bất kỳ ai trong tương lai.

Trả lời

34

== có mức độ ưu tiên cao hơn hơn &. Bạn có thể muốn bao gồm các hoạt động của mình trong () để chỉ định mức độ ưu tiên của riêng bạn.

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

Tương tự như mọi phần của điều kiện if.

0

Bạn phải chính xác hơn, sử dụng dấu ngoặc đơn, nếu không Java sẽ không sử dụng thứ tự các toán hạng mà bạn muốn sử dụng.

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

trở thành

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

& có một ưu tiênít hơn ==.

Mã của bạn là tương đương với a[0] & (1 == 0), và trừ khi a[0] là một boolean này sẽ không biên dịch ...

Bạn cần phải:

(a[0] & 1) == 0 

vv vv

(vâng, Java không sử dụng toán tử boolean & - một lô-gic không hợp lý và)

+0

Điều gì có nghĩa là 'một lối tắt không hợp lý và'? – Colas

Các vấn đề liên quan