2011-02-14 16 views
7

क्या continue या break के लिए वर्तमान में चल रहे लूप की तुलना में बड़ा दायरा रखने की संभावना है?
निम्नलिखित उदाहरण में, मैं expr पर बाहरी फॉर-लूप पर जारी रखना चाहता हूं, हालांकि इसे आंतरिक फॉर-लूप में कहा जाता है, ताकि न तो [some inner code] और न ही [some outer code] निष्पादित किया जा सके।एक विस्तारित दायरे के साथ जारी रखें और ब्रेक करें

for(int outerCounter=0;outerCounter<20;outerCounter++){ 
    for(int innerCounter=0;innerCounter<20;innerCounter++){ 
     if(expr){ 
     [continue outer]; // here I wish to continue on the outer loop  
     } 
     [some inner code] 
    } 
    [some outer code] 
} 

ऊपर

उत्तर

11

यदि आप बिल्कुल जरूरी हैं तो आप goto का उपयोग कर सकते हैं। हालांकि, मैं आम तौर पर दो तरीकों में से एक ले:

  • भीतरी पाश bool लौटने एक अलग विधि बनाएं, तो मैं बस इसे से लौट सकते हैं और संकेत मिलता है क्या बाहरी पाश को तोड़ने करना चाहिए (, जारी रखने या बाकी
  • पाश शरीर के) भीतरी पाश के भीतर एक अलग bool ध्वज जो भीतरी पाश से पहले सेट है, संशोधित किया जा सकता रखें, और उसके बाद के बाद भीतरी पाश
इन तरीकों का

चेक किया गया है मैं आम तौर पर "निकालें विधि" दृष्टिकोण को प्राथमिकता देते हैं।

+1

यह आश्चर्यजनक है कि संचार कौशल कभी-कभी अंतर कैसे बना सकता है। मैं वास्तव में अपने उत्तर को अपने आप पसंद करते हैं। – tzup

1

आप गोटो बयान का उपयोग कर सकते हैं, अन्यथा - कोई, तोड़ने के लिए और बयान इस का समर्थन नहीं करता जारी है।

हालांकि गोटो बयान में माना जाता है बुरा व्यवहार के रूप में यह केवल क्यों छोरों के लिए एक से अधिक बाहर निकलने के लिए है ... और यह इस तरह दिखता है कारण अभी भी नेट

का एक हिस्सा
4

तुम्हारा मतलब क्या हो रहा है कुछ इस तरह?

for(int outerCounter=0;outerCounter<20;outerCounter++){ 
    for(int innerCounter=0;innerCounter<20;innerCounter++){ 
     if(expr){ 
     runOuter = true; 
     break; 
     } 
     [some inner code] 
    } 
    if (!runOuter) { 
     [some outer code] 
    } 
    runOuter = false; 
} 
+1

यह नहीं के बाद से runOuter सच होगा और [कुछ बाहरी कोड] चलाता है केवल यदि runOuter गलत है। क्या यह तर्क आप चाहते थे? – tzup

+0

+1 हां धन्यवाद, यह जॉन स्कीट्स पोस्ट का दूसरा संस्करण है। हालांकि मेरी पिछली टिप्पणी आपके पहले उत्तर से संबंधित थी जिसने समस्या को हल नहीं किया। मैंने अपनी टिप्पणी हटा दी है। – HCL

+0

@ एचसीएल, मुझे बस एहसास हुआ। यह अजीब बात है कि आप उस पोस्ट को देखने में सक्षम थे क्योंकि मैंने अपनी गलती को महसूस किया और पोस्ट को बेहतर उत्तर देने के बाद इसे तुरंत हटाने की कोशिश की। वैसे भी, जॉन पूरी तरह से इस जवाब का हकदार है। – tzup

1

आप लेबल के साथ goto कथन का उपयोग कर सकते हैं:

for(int outerCounter=0;outerCounter<20;outerCounter++){ 
     for(int innerCounter=0;innerCounter<20;innerCounter++){ 
     if(expr){ 
      break; 
     } 
     [some inner code] 
     } 
     // You will come here after break 
     [some outer code] 
    } 
+1

यह सरल ब्रेक स्टेटमेंट के साथ किया जा सकता है – anthares

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