2012-10-25 24 views
22
में

अजगर में किसी और पाश कार्यान्वयन के लिए एक कुशल है वर्णित hereकुशल कार्यान्वयन: "वरना लूप के लिए अजगर" जावा

उदाहरण कोड:

for x in range(2, n): 
    if n % x == 0: 
     print n, 'equals', x, '*', n/x 
     break 
else: 
    # loop fell through without finding a factor 
    print n, 'is a prime number' 

जावा में मैं और अधिक कोड लिखने की जरूरत है एक ही व्यवहार को प्राप्त करने के लिए:

finishedForLoop = true; 
for (int x : rangeListOfIntegers){ 
    if (n % x == 0) 
    { 
     //syso: Some printing here 
     finishedForLoop = false 
     break; 
    } 
} 
if (finishedForLoop == true){ 
    //syso: Some printing here 
} 

क्या जावा में लूप के लिए पाइथन के समान कोई बेहतर कार्यान्वयन है?

+4

आप 'if (endForLoop == true)' 'if (finishedForLoop) 'के साथ बदल सकते हैं। 'सत्य' के लिए परीक्षण करने की कोई आवश्यकता नहीं है, 'if' कथन यह स्पष्ट रूप से करता है :) – fredoverflow

उत्तर

47

यह इस तरह किया जाता है:

class A { 
    public static void main(String[] args) { 
     int n = 13; 
     found: { 
      for (int x : new int[]{2,3,4,5,6,7,8,9,10,11,12}) 
       if (n % x == 0) { 
        System.out.println("" + n + " equals " + x + "*" + (n/x)); 
        break found; 
       } 
      System.out.println("" + n + " is a prime number"); 
     } 
    } 
} 

$ javac A.java && java A 
13 is a prime number 
+3

लेबल 'ब्रेक' क्यों? बाहर तोड़ने के लिए केवल एक लूप है। – fredoverflow

+15

@FredOverflow: यह लूप से बाहर नहीं टूट रहा है, लेकिन संलग्न ब्लॉक। – Eric

+2

@FredOverflow एरिक की टिप्पणी पर विस्तार करने के लिए: लूप का अनुसरण करने वाले बयान पर एक लेबल रहित ब्रेक जारी रहेगा और अभी भी 'println' कथन के माध्यम से बह जाएगा। – Zecc

2

नहीं। यह सबसे आसान है। यह नहीं है जटिल, यह सिर्फ वाक्यविन्यास है।

+2

भी, भले ही आपको कुछ "सरल" मिल जाए, यह भी "स्मार्ट" होगा। और "स्मार्ट" – tucuxi

+0

+1 पढ़ने में मुश्किल है, हाँ, आप सही हैं, मुझे अभी भी "स्मार्ट" समाधानों में दिलचस्पी है :-) – Michael

+0

मुझे नहीं लगता कि न्यूनतम वाक्यविन्यास का उपयोग करने के बारे में क्या स्मार्ट नहीं है। सीधे अपने प्रश्न का उत्तर देने के लिए, कोई भी आसान नहीं है और कुछ भी स्मार्ट नहीं है। – Joe

11

जब मैं कुछ इस तरह करने की ज़रूरत में इस तरह कोई तंत्र है, अगर कोई अतिरिक्त जानकारी की जरूरत है, मैं आम तौर पर एक अलग विधि में इसे बाहर तोड़ने की कोशिश - जो तब कर सकते हैं वापसी true/false या वैकल्पिक रूप से या तो मान पाया गया, या शून्य अगर यह नहीं मिला है। यह हमेशा काम नहीं करता है - यह बहुत संदर्भ-विशिष्ट है - लेकिन यह कोशिश करने योग्य कुछ है।

तो फिर तुम सिर्फ लिख सकते हैं:

for (...) { 
    if (...) { 
     return separateMethod(); 
    } 
} 
return null; // Or false, or whatever 
+0

+1, मुझे आपके सुझाव पसंद हैं, धन्यवाद – Michael

+0

जब कोई अलग विधि आदर्श नहीं है, तो आप लेबल वाले ब्रेक का उपयोग करके लूप का हमेशा "ब्रेक आउट" कर सकते हैं ... लेकिन अभ्यास में इसे देखना बहुत दुर्लभ है। – tucuxi

1

java8 के बाद से एक तरह से "लगभग नहीं" कोड के साथ इस लिखने के लिए नहीं है :

if(IntStream.range(2, n).noneMatch(x -> n % x == 0)) { 
    System.out.println(n + " is a prime number"); 
} 

लेकिन यह शास्त्रीय लूपिंग-ब्रेक-एंड-फ्लैग विधि से कम कुशल होगा।