पर जारी बयान के साथ एक फॉर-लूप को कनवर्ट करना मैं एक ऐसे अभ्यास पर काम कर रहा हूं जहां फॉर-लूप के आधार पर कोड का एक छोटा टुकड़ा एक ही समय के साथ उसी ऑपरेशन को पूर्ववत करने के लिए परिवर्तित हो जाता है। रूपांतरण उद्देश्य से गलत है, और इस तरह दिखता है:जबकि-लूप
int sum = 0;
for (int i = 0; i < 4; i++) {
if (i % 3 == 0) continue;
sum += i;
}
System.out.println(sum); // prints 3
इस में बदल जाता है:
int i = 0, sum = 0;
while (i < 4) {
if (i % 3 == 0) continue;
sum += i;
i++;
}
System.out.println(sum); // will not print
व्यायाम में, मैं समझाने के लिए क्यों रूपांतरण गलत है पूछा रहा हूँ और फिर इसे ठीक। मेरे विचार कर रहे हैं:
- का प्रारंभिक मूल्य के साथ
मैं = 0, इस जारी रखने के, ट्रिगर किया जाएगा तुरन्त इच्छा पाश प्रवेश करने के बाद के बाद से (0% 3 == 0)कर देगा if-statement सत्य। जब तक प्रारंभिक मान 0 होता है, यह लूप निष्पादित करेगा, ताकि इसे अनगिनत बार छोड़ दिया जा सके। मैंने i = 1 के प्रारंभिक मान को बदलने का प्रयास किया, लेकिन नोई योग मुद्रित है। फिर मैंने i को निष्पादित करने से पहले निष्पादित करने से पहले, और प्रोग्राम अब राशि 7 प्रिंट करता है। यहां सवाल है; अगर मैं कथन के बाद वृद्धि करता हूं तो प्रोग्राम प्रिंट क्यों नहीं करेगा, भले ही i = 1 का प्रारंभिक मान सुझाता है (मेरे सिर में) कि प्रोग्राम ठीक से चलाना चाहिए?
मैंने प्रत्येक प्रोग्राम के लिए संक्षेप की तुलना करने के लिए एक टेबल बनाया है।
के लिए लूप संस्करण:
मैं = 0, योग + = मैं preformed नहीं (जारी रखने के लिए), i ++
मैं = 1, योग = 1, i ++
मैं = 2, योग = 3, i ++
मैं = 3, योग + = मैं preformed नहीं (जारी रखने के लिए), i ++
मैं = 4, मैं < 4 झूठी, पाश बंद कर दिया
जबकि लूप संस्करण:
मैं = 0, i ++, योग = 1
मैं = 1, i ++, योग = 3
मैं = 2, i ++, योग + = मैं preformed (जारी रखने के लिए) नहीं
मैं = 3, i ++, योग = 7
मैं = 4, मैं < 4 झूठी, पाश
बंद कर दिया में जबकि लूप, योग + = मैं एक बार के लिए लूपकी तुलना में अधिक preformed है। फॉर-लूप को जबकि-लूप में परिवर्तित करने का यह सही तरीका है?
int i = 0, sum = 0;
while (i < 3) {
i++;
if (i % 3 == 0) continue;
sum += i;
}
System.out.println(sum);
1. '3% 3' शून्य –
कड़ाई से बोलने में एक और अंतर है: 'i' अब बाकी ब्लॉक से दिखाई दे रहा है। 'के लिए एक समकक्ष (int i = 0; ....) {}' निर्माण '{int i = 0 है; जबकि (...) {}} '(वैरिएबल घोषणा और लूप दोनों को संलग्न ब्रेसिज़ की अतिरिक्त जोड़ी को नोट करें)। – biziclop