Monday, 15 June 2015

java - Why does this cause an infinite loop -


इस सरल कोड पर विचार करें:

  // E1 सार्वजनिक शून्य doTest (स्ट्रिंग पैटर्न) { इंट काउंटर = 0; जबकि (काउंटर & lt; 3) {काउंटर = काउंटर ++; } System.out.println ("संपन्न"); }   

यह एक अनंत लूप का कारण बनता है

हालांकि यदि काउंटर को वेतन बढ़ाने वाले बयान इस प्रकार लिखा जाता है:

  E2 काउंटर = ++ काउंटर;   

या यह

  E3 काउंटर ++;   

यह सामान्य रूप से समाप्त होता है मैं समझता हूं कि संस्करण में असाइनमेंट के बाद वृद्धि बढ़ जाती है जो बताता है कि ई 2 क्यों काम करता है, लेकिन मैंने सोचा था कि जावा ने वेरिएबल में वृद्धि के परिणाम निर्दिष्ट किए जो ई 3 में बढ़ते हैं। इसलिए मैं इस बारे में परेशान हूँ कि ई 1 क्यों विफल रहता है लेकिन ई 3 नहीं करता।

  काउंटर = काउंटर ++;   

उपरोक्त कोड का काउंटर पर कोई प्रभाव नहीं पड़ता है। यह प्रभावी रूप से समान है:

  int temp = counter; काउंटर ++; काउंटर = अस्थायी;   

इसलिए, काउंटर का मान बिल्कुल भी बदल नहीं रहा है।

दूसरी ओर, यदि आप उपयोग करते हैं:

  काउंटर = ++ काउंटर;   

काउंटर पहले बढ़ता है, और फिर काउंटर को फिर से सौंपा जाता है। मूलतः, आप असाइनमेंट भाग की अनदेखी कर सकते हैं, और इसे बस इसे रख सकते हैं:

  counter ++; // या ++ काउंटर    

No comments:

Post a Comment