2013-08-29 32 views
9

स्विच से अधिक या बराबर का उपयोग कैसे करें यह जांचने का सबसे अच्छा तरीका क्या है कि स्विच स्टेटमेंट का उपयोग करके कुछ संख्या से वैरिएबल बड़ा है या नहीं? या आप अगर उपयोग करने के लिए reccomend?स्विच स्टेटमेंट

int i; 

if(var1>var2) i = 1; 
if(var1=var2 i = 0; 
if(var1<var2) i = -1; 

switch (i); 
{ 
    case -1: 
    do stuff; 
    break; 

    case 0: 
    do stuff; 
    break; 

    case 1: 
    do stuff; 
    break; 

} 

क्या आप "के बराबर या अधिक से अधिक" स्विच बयान में उपयोग के बारे में एक नौसिखिया बता सकते हैं: मैं इस तरह के एक उदाहरण पाया? अगर यह तुम क्या कह रहे हैं, लेकिन आप इसे इस तरह से कर सकता

+5

मैं कहूंगा कि यह 3 'if' – SJuan76

+0

साथ साफ हो जाएगा एक अगर-बाकी –

+2

मैं नहीं देख सकते हैं कि आप एक स्विच बयान का उपयोग करते हैं आप पहले से ही एक अगर बयान मिल गया है आप के साथ बेहतर कर रहे हैं। बस तर्क दें क्योंकि तर्क पहले से ही – Mattsjo

उत्तर

17

सुनिश्चित नहीं हैं:

int var1; 
int var2; 

int signum = Long.signum((long)var1 - var2); 
switch(signum) { 
    case -1: break; 
    case 0: break; 
    case 1: break; 
} 
+2

है, यह बहुत छोटा कोड है, लेकिन मुझे यकीन नहीं है कि यह हर किसी के लिए आसान है (स्वयं सहित)। मुझे लगता है कि कोड रखना इतना महत्वपूर्ण है जो आसानी से पठनीय है यदि उस कोड को लंबे समय तक कई पीपल्स द्वारा बनाए रखा जाएगा। स्विच का उपयोग करने के लिए – treeno

+1

+1 और मैंने अपना जवाब अपडेट कर दिया है। यह बात बताने के लिए धन्यवाद। –

+1

संख्यात्मक अतिप्रवाह के जोखिम के कारण अनुशंसित नहीं है। बग खोजने में घंटों लग सकते हैं। – Holger

4

जावा केवल प्रत्यक्ष मूल्यों, case बयान में पर्वतमाला नहीं का समर्थन करता है, इसलिए यदि आप एक स्विच का उपयोग करना चाहिए, पहले विकल्पों में मैपिंग, फिर उस पर स्विच करना, जैसा कि आप प्रदान करते हैं उदाहरण में आपकी एकमात्र पसंद है। हालांकि यह काफी अधिक है - बस बयानों का उपयोग करें।

+0

असल में सच है। हालांकि कुछ मामलों में (ओपी का मामला नहीं), डिफ़ॉल्ट विकल्प का उपयोग प्रभावी रूप से किसी श्रेणी का समर्थन करने के लिए किया जा सकता है। – emory

10

मैं दृढ़ता से if(var1>var2){}else if (var1==var2) {} else {} निर्माण की अनुशंसा करता हूं। यहां एक स्विच का उपयोग इरादे को छुपाएगा। और क्या होगा यदि break त्रुटि से हटा दिया गया है?

स्विच तुलनात्मक मूल्यों के लिए उपयोगी और स्पष्ट है, तुलना के लिए नहीं।

6

पहला सुझाव: switch क्योंकि राज्यों को केवल स्विचिंग के लिए उपयोग किया जाना चाहिए और शर्त जांच के लिए नहीं।

From JLS switch statements

SwitchStatement: 
    switch (Expression) SwitchBlock 

भाव परिवर्तनीय int करने के लिए या Enum अभिव्यक्ति में समर्थित हैं।

ये लेबल, स्विच बयान के साथ जुड़े होने के रूप में निरंतर भाव (§15.28) या enum स्थिरांक की मान हैं कहा जाता है (§8.9.1) मामले लेबल में।

जावा 7 स्ट्रिंग मानों के साथ 1.6 या उससे कम के लिए स्विच स्टेटमेंट में केवल निरंतर अभिव्यक्तियों और एनम स्थिरांक की अनुमति है। कोई तार्किक अभिव्यक्ति समर्थित नहीं है।

वैकल्पिक रूप से आप अपने उत्तर में @ स्टीवर्ट द्वारा दिए गए अनुसार कर सकते हैं।

+0

यदि 'var1 == 6' और' var2 == 4', तो 'var1 - var2 == 2' जो आपके 'स्विच' में नहीं है। आपको 5 मिनट पहले मेरे उत्तर के अनुसार 'Integer.signum()' का उपयोग करने की आवश्यकता है। :) – Stewart

+0

और साइनम के साथ यह अभी भी टूटा हुआ है क्योंकि अंतर एक अतिप्रवाह और गलत परिणामों को उत्पन्न करने वाली पूर्णांक सीमा से अधिक हो सकता है। – Holger

0

यदि एक चर का मूल्य उपयोग किया जाता है, तो स्विच का उपयोग करें। यदि एकाधिक चर चल रहे हैं, तो उपयोग करें। आपकी कहा गया समस्या में, यह होना चाहिए यदि

3

विशिष्ट मान लौटाए जाने पर कोड स्विच करने के लिए एक स्विच स्टेटमेंट होता है, तो अगर आपको एक कथन में मूल्यों का चयन करने की अनुमति मिलती है। मैं निम्नलिखित की तरह कुछ कर रही सिफारिश करेंगे (हालांकि मैं personnally Integer.signum विधि पसंद करते हैं) आप एक से अधिक श्रेणियों को देखने के लिए चाहते हैं चाहिए:

int i; 

if (var1 > var2) { 
    i = 1; 
} 
else if (var1 == var2) { 
    i = 0; 
} 
else { 
    i = -1; 
} 
0

दुर्भाग्य से आप ऐसा नहीं कर सकते जावा में। CoffeeScript या अन्य भाषाओं में यह संभव है।

मैं if - else-अतिरिक्त विधियों में अपनी "सामग्री" को स्थानांतरित करके स्टेटमेंट का उपयोग करने की अनुशंसा करता हूं।इस तरह आप एक स्पष्ट रूप से पठनीय कोड में अपना if-else रख सकते हैं।

2

आप if कथन के साथ बेहतर हैं; switch दृष्टिकोण बहुत कम स्पष्ट है, और इस स्थिति में, आपके switch दृष्टिकोण निष्पक्ष रूप से गलत हैThe contract for Comparable#compareTo को -1 या 1 लौटने की आवश्यकता नहीं है, बस लौटाए गए int का मान नकारात्मक या सकारात्मक हो। यह compareTo के लिए -42 वापस करने के लिए पूरी तरह से वैध है, और आपके switch कथन परिणाम को छोड़ देगा।

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