2013-10-13 13 views
7

क्यों मेरी संकलक कह रहा है:बुलियन के साथ स्विच स्टेटमेंट काम नहीं कर रहा है?

असंगत प्रकार:

आवश्यक: बूलियन

मिला: इंट

मामले के तहत 0 & मामले 1


उदाहरण के लिए:

public void test(boolean isOn){ 
    switch (isOn){ 
     case 0: 
      if (isOn){ 
       System.out.println("its on"); 
      } 
      break; 
     case 1: 
      if (!isOn){ 
       System.out.println("its off"); 
      } 
      break; 
     default: 
      System.out.println("I don't know!"); 
    } 

}

चालक कक्षा:

Club me = new Club(); 
me.test(true); 
+0

आपका 'switch' और' if' बेमानी हैं। – SLaks

+0

मुझे यह पता है कि मैं कम से कम देख सकता हूं कि यह कैसे काम करता है, मैं केवल यह –

+1

बूलियन मान - 'सत्य', 'झूठा', 'FILE_NOT_FOUND' सीख रहा हूं! जावा में, 'बूलियन' में केवल दो मान हो सकते हैं - सत्य, और झूठा। आपका डिफ़ॉल्ट मामला कभी नहीं पहुंचाया जाएगा (और अधिकतर लोग 'if' कथन का उपयोग करेंगे)। अब, 'बूलियन' (पूंजी '' बी 'नोट करें)' शून्य 'हो सकता है (जिस बिंदु पर "मुझे नहीं पता" समझ में आता है), लेकिन आप इसका उपयोग यहां नहीं कर रहे हैं ... –

उत्तर

1

त्रुटि स्पष्ट रूप से कहा गया है के रूप में, संख्या बूलियन्स नहीं हैं।

आप true और false चाहते हैं।

11

आप boolean प्रकार पर स्विच कर रहे हैं, और आपके मामले int प्रकारों का उपयोग कर रहे हैं। लेकिन भले ही आप अपने मामलों को boolean प्रकारों में बदल दें, जो काम नहीं करेगा। आप boolean प्रकार पर स्विच नहीं कर सकते हैं। और वह एक if-else का उपयोग कर आसान वैसे भी होगा के रूप में कोई मतलब नहीं होगा:

if (isOn) { 
    System.out.println("its on"); 
} else { 
    System.out.println("its off"); 
} 

नोट नहीं "I don't know!" मामले यहाँ नहीं है। boolean प्रकार में true या false मान हो सकता है। यह एक और कारण है, switch-caseboolean प्रकार के लिए क्यों नहीं है। कोई डिफ़ॉल्ट मामला नहीं है।

तुम भी एक सशर्त अभिव्यक्ति का उपयोग करके एक सिंगल स्टेटमेंट के लिए यह गाढ़ा कर सकते हैं:

public void test(boolean isOn) { 
    System.out.println(isOn ? "its on" : "its off"); 
} 
+0

मैंने किया अब स्विच के तहत परिवर्तन (isOn) 'इसकी कहानियां मिली: बूलियन, आवश्यक: चार, बाइट, लघु या int –

+0

@ सोमोन आप' बूलियन 'प्रकार पर स्विच नहीं कर सकते, लेकिन केवल' int' प्रकार, 'स्ट्रिंग', या 'enum' प्रकार। –

+1

'सत्य' पर स्विच करना वास्तव में अधिक उपयोगी है जो आप इसे प्रतीत करते हैं। जाओ हर समय https://code.google.com/p/go-wiki/wiki/Switch#Missing_expression –

2

switch (isOn): boolean स्विचिंग और int जैसे case 0 के साथ मामला करना चाहते हैं!

JLS section 14.11 के अनुसार: एक switch (Expression) SwitchBlock के लिए:

अभिव्यक्ति केवल char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type अन्य हो सकता है बुद्धिमान एक संकलन समय त्रुटि होता है।

विनिर्देश निम्नलिखित के अनुसार भी कर रहे हैं सच होना चाहिए:

  1. हर मामला लगातार एक स्विच बयान के साथ जुड़े अभिव्यक्ति स्विच अभिव्यक्ति के प्रकार के आबंटित किया जाना चाहिए।
  2. case स्विच कथन के साथ जुड़े निरंतर अभिव्यक्तियों में से कोई भी समान मान नहीं हो सकता है।
  3. नहीं switch लेबल null है।
  4. सबसे एक डिफ़ॉल्ट लेबल पर ही स्विच बयान के साथ जुड़ा हो सकता है

इसलिए, अभिव्यक्ति स्विच नाव, डबल या boolean नहीं हो सकता। सवाल का जवाब देने के लिए क्यों ?: बूलियन true falseif-else के साथ सार्थक हैं, उदाहरण के लिए, if(true) then do। फ़्लोटिंग पॉइंट नंबर (float, double) स्विच के लिए एक अच्छा कैंडीडैड नहीं है क्योंकि सटीक तुलना अक्सर गोल करने वाली त्रुटियों से टूट जाती है। जैसे 0.11 - 0.1 == 0.01 गलत है।

0

यह सी ++ नहीं है जहां 1 और 0 को सही और गलत से/रूपांतरित रूप से परिवर्तित किया जाता है। बुलियन पर स्विचिंग भी समय की बर्बादी है भले ही आप इसे कर सकें; बस एक और कथन लिखें, या ? : निर्माण का उपयोग करें।

0

बस और 0.

public void test(boolean isOn){ 
    int trueOrFalse; 
    if(isOn == true){ 
     trueOrFalse = 1; 
    }else{ 
     trueOrFalse = 0; 
    } 
    switch (trueOrFalse){ 
     case 1: 
      if (isOn){ 
       System.out.println("its on"); 
      } 
      break; 
     case 0: 
      if (!isOn){ 
       System.out.println("its off"); 
      } 
      break; 
     default: 
      System.out.println("I don't know!"); 
    } 
} 
+0

इस तरह के लेखन कोड को प्रोत्साहित न करें। – Raildex

0

1 की संख्या के बूलियन परिवर्तित जावा में, स्विच बूलियन के साथ काम नहीं करता है।

स्वीकृत चर प्रकार हैं: चार, बाइट, लघु, पूर्णांक, स्ट्रिंग, चरित्र, बाइट, लघु, पूर्णांक, enum

संबंधित मुद्दे