2010-01-06 21 views
8

Tôi đã đoạn mã sau:Tôi đang làm gì sai với các nhà khai thác có điều kiện?

public class boolq { 
    public static void main(String[] args) { 
     boolean isTrue = true; 
     isTrue ? System.out.println("true"): System.out.println("false");  
    } 
} 

khi tôi cố gắng để biên dịch nó tôi có được điều này:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:

Syntax error on token ";", assert expected after this token

Type mismatch: cannot convert from void to boolean

at boolq.main(boolq.java:3)

những gì tôi làm sai?

java -version

java version "1.6.0_15"

Java(TM) SE Runtime Environment (build 1.6.0_15-b03)

Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)

Trả lời

20

Nhà điều hành ternary là một biểu hiện, và đánh giá cho một trong hai các giá trị mà bạn chuyển cho nó.

System.out.println không trả lại giá trị, bạn không thể đặt giá trị đó bên trong toán tử bậc ba.

Bạn cần phải viết System.out.println(isTrue ? "true" : "false");

+1

sai lầm phổ biến, đó là hoạt động ternary - http://en.wikipedia.org/wiki/Ternary_operation – jball

+0

công trình như một sự quyến rũ –

+0

@jball: Bạn nói đúng; đại học có nghĩa là thứ ba. – SLaks

3

Bạn đang cố sử dụng biểu thức trong ngữ cảnh câu lệnh. Hãy thử:

public class boolq { 
    public static void main(String[] args) { 
     boolean isTrue = true; 
     if (isTrue) { 
      System.out.println("true"); 
     } else { 
      System.out.println("false"); 
     } 
    } 
} 
4

đã không sử dụng Java trong một thời gian, nhưng tôi sẽ sử dụng cú pháp này để giải quyết vấn đề:

public class boolq { 
    public static void main(String[] args) { 
     boolean isTrue = true; 
     System.out.println(isTrue ? "true" : "false");  
    } 
} 
8

Thật ra có hai lỗi trong bản Tuyên Bố này.

isTrue ? System.out.println("true"): System.out.println("false"); 

Như @Slaks chỉ ra, ternary '?' toán tử yêu cầu biểu thức toán hạng hai và thứ ba có kiểu không trống. Điều đó giải thích thông điệp

"Type mismatch: cannot convert from void to boolean".

Nhưng sứ điệp

"Syntax error on token ";", assert expected after this token"

đang nói cái gì đó khác nhau !! Điều này xảy ra bởi vì không phải tất cả các biểu thức có thể được sử dụng như các câu lệnh trong Java. Tóm lại, điều này vẫn sẽ là một lỗi, ngay cả sau khi bạn thay thế các cuộc gọi println với các biểu thức không trống.

Phần áp dụng Java ngữ pháp nói điều này:

ExpressionStatement: 
    StatementExpression ; 

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

Chú ý rằng biểu thức ternary không có trong danh sách. Trình phân tích cú pháp sau đó giả sử (không chính xác) mà bạn đang cố gắng viết một AssertStatement và nói rằng bạn đã bỏ từ khóa assert ở đầu dòng.

1

Nếu bạn vẫn muốn làm điều đó sử dụng "ngắn nếu", vì vậy hãy thử này:

boolean isTrue;  
PrintStream ps = isTrue ? System.out : System.err; 
ps.println(String.valueOf(isTrue)); 
Các vấn đề liên quan