क्या आप मुझे इस जावा कोड का आउटपुट समझा सकते हैं?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
आउटपुट दोनों मामलों में 20 है
क्या आप मुझे इस जावा कोड का आउटपुट समझा सकते हैं?
int a=5,i;
i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;
System.out.println(a);
System.out.println(i);
आउटपुट दोनों मामलों में 20 है
जवाबों:
क्या यह मदद करता है?
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)
मुख्य बिंदु यह है कि ++a
मूल्य बढ़ाता है और तुरंत इसे वापस करता है।
a++
मान भी बढ़ाता है (पृष्ठभूमि में) लेकिन चर का अपरिवर्तित मूल्य लौटाता है - ऐसा लगता है कि यह बाद में निष्पादित होता है।
int a = 1; int b = a++; int c = ++b;
बी होने की उम्मीद कर रहा था क्योंकि यह पोस्ट वेतन वृद्धि है।
++a
वेतन वृद्धि और फिर चर का उपयोग करता है।
a++
उपयोग करता है और फिर चर को बढ़ाता है।
यदि आपके पास है
a = 1;
और आप करते हैं
System.out.println(a++); //You will see 1
//Now a is 2
System.out.println(++a); //You will see 3
कोडैडक्ट आपके विशेष स्निपेट की व्याख्या करता है ।
दोनों मामलों में यह पहले मूल्य की गणना करता है, लेकिन वेतन वृद्धि के बाद यह पुराना मूल्य रखता है और रिटर्न की गणना के बाद
++ एक
एक ++
i = ++a + ++a + a++;
है
i = 6 + 7 + 7
कार्य करना : 6 से बढ़ाना (वर्तमान मान 6) + 7 से बढ़ाना (वर्तमान मान 7)। Sum 13 है अब इसे (= 7) के वर्तमान मूल्य में जोड़ें और फिर 8 से वृद्धि करें। योग 20 है और असाइनमेंट पूरा होने के बाद का मूल्य 8 है।
i = a++ + ++a + ++a;
है
i = 5 + 7 + 8
कार्य करना : a के आरंभिक मूल्य पर 5. इसके अतिरिक्त का उपयोग करें और फिर इसे 6 तक बढ़ाएँ (वर्तमान मान 6)। + के अन्य संचालक प्राप्त करने के लिए वर्तमान मूल्य 6 से 7 तक की वृद्धि। Sum 12 है और a का वर्तमान मान है। 7 से 8 तक अगला वेतन वृद्धि (वर्तमान मान = 8) और इसे 20 प्राप्त करने के लिए पिछली राशि 12 में जोड़ें।
++a
a
मूल्यांकन से पहले वेतन वृद्धि ।
a++
मूल्यांकन करता है a
और फिर इसे बढ़ाता है।
आपकी दी गई अभिव्यक्ति से संबंधित:
i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end
जिन माता-पिता का मैंने ऊपर उपयोग किया है, वे जावा द्वारा अंतर्निहित रूप से उपयोग किए जाते हैं। यदि आप शर्तों को इस तरह से देखते हैं तो आप आसानी से देख सकते हैं, कि वे दोनों एक ही हैं जैसे वे प्रशंसनीय हैं।
++ ए उपसर्ग वृद्धि वेतन ऑपरेटर है:
a ++ पोस्टफ़िक्स इन्क्रीमेंट ऑपरेटर है:
एक बार जब आप नियमों को याद करते हैं, तो सब कुछ की गणना करने के लिए ईज़ी!
मान लिया कि आप का मतलब है
int a=5; int i;
i=++a + ++a + a++;
System.out.println(i);
a=5;
i=a++ + ++a + ++a;
System.out.println(i);
a=5;
a=++a + ++a + a++;
System.out.println(a);
यह मूल्यांकन करता है:
i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
इसलिए i 6 + 7 + 7 = 20 है और इसलिए 20 मुद्रित है।
i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)
इसलिए मैं 5 + 7 + 8 = 20 है और इसलिए 20 फिर से छपा है।
a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)
और दाहिने हाथ की ओर से मूल्यांकन किए जाने के बाद (8 से 8 सेट करने सहित) को 6 + 7 + 7 = 20 पर सेट किया जाता है और इसलिए 20 को अंतिम समय में प्रिंट किया जाता है।
जब a
5 है, तब a++
अभिव्यक्ति को 5 और a
बाद में वेतन वृद्धि देता है , जबकि संख्या को अभिव्यक्ति को पास करने से पहले ++a
बढ़ाता है a
(जो a
इस मामले में अभिव्यक्ति को 6 देता है )।
तो आप हिसाब लगा लीजिए
i = 6 + 7 + 7
i = 5 + 7 + 8
मेरा मानना है कि यदि आप अपने सभी बयानों को जोड़ते हैं और इसे जावा 8.1 में चलाते हैं तो आपको एक अलग उत्तर मिलेगा, कम से कम मेरा अनुभव तो यही कहता है।
कोड इस तरह काम करेगा:
int a=5,i;
i=++a + ++a + a++; /*a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8); i=20;*/
i=a++ + ++a + ++a; /*a = 5;
i=a++ + ++a + ++a; =>
i=8 + 10 + 11; (a=11); i=29;*/
a=++a + ++a + a++; /*a=5;
a=++a + ++a + a++; =>
a=12 + 13 + 13; a=38;*/
System.out.println(a); //output: 38
System.out.println(i); //output: 29
प्री-इंक्रीमेंट का मतलब है कि वेरिएबल को पहले से इंप्रूव किया गया है क्योंकि इसका एक्सप्रेशन में मूल्यांकन किया गया है। पोस्ट-इन्क्रीमेंट का मतलब है कि वेरिएबल बढ़ा हुआ है, इसे अभिव्यक्ति में उपयोग के लिए मूल्यांकन किया गया है।
इसलिए, ध्यान से देखें और आप देखेंगे कि तीनों असाइनमेंट अंकगणितीय रूप से समतुल्य हैं।
a=5; i=++a + ++a + a++;
है
i = 7 + 6 + 7
कार्य करना: पूर्व / पोस्ट वेतन वृद्धि में "राइट टू लेफ्ट" एसोसिएटिविटी है, और प्री पोस्ट पर पूर्ववर्तीता है, इसलिए सबसे पहले पूर्व वेतन वृद्धि को हल किया जाएगा (++a + ++a) => 7 + 6
। फिर a=7
वेतन वृद्धि => 7 + 6 + 7 =20
और पोस्ट करने के लिए प्रदान की जाती है a =8
।
a=5; i=a++ + ++a + ++a;
है
i=7 + 7 + 6
कार्य करना: पूर्व / पोस्ट वेतन वृद्धि में "बाएं से दाएं" संबद्धता है, और पूर्व में पोस्ट पर पूर्ववर्तीता है, इसलिए सबसे पहले पूर्व वेतन वृद्धि को हल किया जाएगा। (++a + ++a) => 7 + 6
फिर a=7
पोस्ट वेतन वृद्धि => 7 + 7 + 6 =20
और प्रदान की जाती है a =8
।
मेरा मानना है कि आप इन सभी कथनों को अलग-अलग
अंजाम दे रहे हैं, एक साथ क्रियान्वित करेंगे => 38, 29
int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated,
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)