2013-05-17 6 views
21

ठीक है, तो मेरे पास कोड का यह टुकड़ा परीक्षण किया गया है और मैंने पाया कि कोई अपवाद नहीं फेंक दिया गया है।यदि कोई दूसरा झूठ है तो कथन दूसरे मामले में होता है यदि पहला झूठा है?

public static void main(String[] args) { 
    int[] list = {1,2}; 
    if (list.length>2 && list[3] == 2){ 
     System.out.println(list[1]); 
    } 
} 

बयान यहाँ

if (list.length>2 && list[3] == 2) 

का मतलब है कि अगर पहली शर्त गलत है हम भी दूसरे की स्थिति की जांच की जरूरत नहीं है करता है?

या यह

if (list.length>2){ 
    if (list[3] == 2){ 
     ... 
    } 
} 

के बराबर है?

और, यदि सी या पायथन या कुछ अन्य भाषाओं में लिखा गया है तो क्या होगा?

धन्यवाद

+1

अपने 2 तरीके बराबर हैं –

+2

जावा इस प्रकार http://en.wikipedia.org/wiki/Short-circuit_evaluation (शॉर्ट सर्किट मूल्यांकन) कि अभिव्यक्ति आप की स्थिति का मूल्यांकन – Vasu

+1

शॉर्ट सर्किट मूल्यांकन देता है कि केवल लंबे समय के रूप कानूनी हो जाएगा मान्य करने के लिए क्योंकि पहली शर्त कानूनी है। आपको अक्सर 'if (string! = Null && string.length> 5)' –

उत्तर

39

यह भाषाओं (जावा और अजगर उन के बीच में कर रहे हैं) एक तार्किक AND का पहला तर्क का मूल्यांकन करने और बयान के मूल्यांकन खत्म करता है, तो पहला तर्क false है करने के लिए आम बात है।

The Order of Evaluation of Logic Operators से,

जावा का मूल्यांकन करता है जब अभिव्यक्ति d = ख & & ग ;, यह पहली चेकों ख सच है कि क्या: इस वजह से है।यहां बी झूठा है, इसलिए बी & & सी इस बात पर ध्यान दिए बिना कि क्या सी है या सत्य नहीं है, इसलिए जावा सी के मूल्य की जांच करने से परेशान नहीं है।

इसे short-circuit evaluation के रूप में जाना जाता है, और इसे Java docs में भी संदर्भित किया जाता है।

यदि यह मौजूद है, तो सूची तत्व की जांच करने के लिए list.count > 0 && list[0] == "Something" देखना आम बात है।


कि if (list.length>2 && list[3] == 2)दूसरे मामले

if (list.length>2){ 
    if (list[3] == 2){ 
     ... 
    } 
} 

अगर है वहाँ एक else बाद के बराबर नहीं है यह भी उल्लेख के लायक है। else केवल if कथन पर लागू होगा, जिस पर यह संलग्न है।

इस पकड़ लिया प्रदर्शित करने के लिए:

if (x.kind.equals("Human")) { 
    if (x.name.equals("Jordan")) { 
     System.out.println("Hello Jordan!"); 
    } 
} else { 
    System.out.println("You are not a human!"); 
} 

अपेक्षा के अनुरूप काम करेंगे, लेकिन

if (x.kind.equals("Human") && x.name.equals("Jordan")) { 
    System.out.println("Hello Jordan!"); 
} else { 
    System.out.println("You are not a human!"); 
} 

भी किसी भी मानव जो है वे इंसान नहीं हैं नहीं Jordan बता देंगे।

+1

अंतिम ब्लॉक उचित है। केवल 'जॉर्डन' दुनिया को चला सकता है। – TheBrenny

+0

पायथन ('&', '|') के बिटवाई ऑपरेटरों ** ** शॉर्ट सर्किटिंग का समर्थन नहीं करते हैं। हालांकि पायथन ** के निम्नलिखित ऑपरेटरों ** **: 'और', 'या',' any', 'all' करते हैं – anilbey

14

हां। यदि पहली शर्त संतुष्ट नहीं है तो शेष का मूल्यांकन नहीं किया जाता है। इसे शॉर्ट सर्किटिंग के रूप में जाना जाता है। अधिक जानकारी के लिए here देखें। ध्यान दें कि यह जावा के लिए विशेष नहीं है और कई अन्य भाषाएं भी वही होंगी।

4

हां, दोनों उपयोग अर्थात् समकक्ष हैं ... वह है, जब तक कि लंबाई 2 नहीं है, तो कोड को दूसरे तत्व से अधिक तक पहुंचने की अनुमति है।

पहले मामले में, क्या मायने रखती है && ऑपरेटर है, के रूप में यह के बारे में सोच: तो पहली शर्त तो दूसरी शर्त लागू सच है।

बाद हालत भी जावाडोक से एक अंतर्निहित "फिर" खंड

if length greater than two 
then access third element 
6

अधिकार है:

सशर्त ऑपरेटर्स

& & और || ऑपरेटरों दो बूलियन अभिव्यक्तियों पर सशर्त-और और सशर्त-या संचालन करते हैं। ये ऑपरेटर "शॉर्ट-सर्किटिंग" व्यवहार प्रदर्शित करते हैं, जिसका अर्थ है कि दूसरा ऑपरेंड केवल तभी मूल्यांकन किया जाता है जब आवश्यक हो।

& & सशर्त-और || सशर्त-या

3

तो पहली शर्त गलत है तो यह अभ्यस्त कुछ भी & & एफ = एफ फिर यह निर्भर करता है जो बुद्धिमान आपरेशन कर रहे हो थोड़ा के रूप में दूसरी शर्त के लिए जाँच करें। या तो (||) के मामले में यदि पहली शर्त सत्य है (टी) यह किसी भी शर्त के रूप में दूसरी स्थिति की जांच नहीं करेगा || टी = टी लेकिन अगर यह झूठा (एफ) है तो यह निश्चित रूप से दूसरे

3

के लिए जांच करेगा आपने अपने आईएफ कथन में निर्दिष्ट किया है कि दोनों शर्तों को System.out.println निष्पादित करने के लिए सत्य होना चाहिए। तो यदि पहली स्थिति स्वयं विफल हो जाती है, तो दूसरी स्थिति की जांच नहीं की जाती है (यह एंड ऑपरेटर के लिए है)। लेकिन यदि आपने कथन में निर्दिष्ट किया है या ऑपरेटर है तो दूसरी स्थिति को चेक किया जाएगा।

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