2010-01-06 17 views
8

मैं निम्नलिखित कोड है:सशर्त ऑपरेटर के साथ मैं क्या गलत कर रहा हूं?

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)

क्या मैं गलत कर रहा हूँ: मैं इस मिल जब मैं यह संकलन करने की कोशिश

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

?

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)

उत्तर

20

त्रिगुट ऑपरेटर एक अभिव्यक्ति है, और दो में से एक का मूल्यांकन मूल्य जो आप इसे पास करते हैं।

चूंकि System.out.println कोई मान नहीं देता है, तो आप इसे टर्नरी ऑपरेटर के अंदर नहीं डाल सकते हैं।

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

+1

आम गलती है, यह त्रिगुट आपरेशन है - http://en.wikipedia.org/wiki/Ternary_operation – jball

+0

काम करता है एक आकर्षण की तरह –

+0

@jball: आप सही हैं; तृतीयक का मतलब तीसरा क्रम है। – SLaks

3

आप एक कथन संदर्भ में अभिव्यक्ति का उपयोग करने का प्रयास कर रहे हैं। प्रयास करें:

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

एक समय में जावा का इस्तेमाल किया है, लेकिन मैं समस्या को हल करने के लिए इस वाक्य रचना का प्रयोग करेंगे:

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

लिखने की ज़रूरत वहाँ वास्तव में कर रहे इस बयान में दो त्रुटियों।

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

जैसा कि @ स्लैक्स बताते हैं, टर्नरी '?' ऑपरेटर की आवश्यकता है कि दूसरे और तीसरे ऑपरेंड एक्सप्रेशन में एक गैर-शून्य प्रकार है।

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

कुछ अलग कह रही है कि संदेश

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

लेकिन संदेश बताते हैं !! ऐसा इसलिए होता है क्योंकि जावा में स्टेटमेंट के रूप में सभी अभिव्यक्तियों का उपयोग नहीं किया जा सकता है। संक्षेप में, यह गैर-शून्य अभिव्यक्तियों के साथ println कॉल को प्रतिस्थापित करने के बाद भी एक त्रुटि होगी।

जावा व्याकरण के लागू हिस्सा कहना है कि यह:

ExpressionStatement: 
    StatementExpression ; 

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

सूचना है कि त्रिगुट अभिव्यक्ति सूची में नहीं है। पार्सर तब (गलत तरीके से) मानते हैं कि आप एक AssertStatement लिखने की कोशिश कर रहे थे और कह रहे थे कि आपने लाइन की शुरुआत में assert कीवर्ड छोड़ा था।

1

आप अभी भी उपयोग करते हुए "संक्षेप अगर" यह करना है, तो कोशिश यह करना चाहते हैं:

boolean isTrue;  
PrintStream ps = isTrue ? System.out : System.err; 
ps.println(String.valueOf(isTrue)); 
संबंधित मुद्दे