यदि आपके पास इस तरह से एक लूप है:
for(j = 0; j<=90; j++){}
यह बढ़िया काम करता है। लेकिन जब आपके पास इस तरह से एक लूप हो:
for(j = 0; j<=90; j+3){}
यह काम नहीं करता है। क्या कोई मुझे यह समझा सकता है?
यदि आपके पास इस तरह से एक लूप है:
for(j = 0; j<=90; j++){}
यह बढ़िया काम करता है। लेकिन जब आपके पास इस तरह से एक लूप हो:
for(j = 0; j<=90; j+3){}
यह काम नहीं करता है। क्या कोई मुझे यह समझा सकता है?
जवाबों:
ऐसा इसलिए j+3
है क्योंकि इसका मूल्य नहीं बदलता है j
। आपको इसे j = j + 3
या उसके साथ बदलने की आवश्यकता है j += 3
ताकि j
3 का मान बढ़े:
for (j = 0; j <= 90; j += 3) { }
int j=0; for(;j<=90;){... j+=3;}
लेकिन यह ;)
चूंकि किसी और ने वास्तव में नहीं किया है, Could someone please explain this to me?
मुझे विश्वास है कि मैं करूंगा:
j++
शॉर्टहैंड है, यह एक वास्तविक ऑपरेशन नहीं है (ठीक है यह वास्तव में आईएस है, लेकिन स्पष्टीकरण के लिए मेरे साथ है)
j++
वास्तव में ऑपरेशन के बराबर है j = j + 1;
सिवाय इसके कि यह मैक्रो या कुछ नहीं है जो इनलाइन प्रतिस्थापन करता है। के संचालन के बारे में यहाँ पर बहुत चर्चाएँ हैं i+++++i
और इसका क्या अर्थ है (क्योंकि इसे i++ + ++i
OR के रूप में देखा जा सकता है(i++)++ + i
जो हमें लाता है: i++
बनाम ++i
। उन्हें ऑपरेटर post-increment
और pre-increment
ऑपरेटर कहा जाता है । क्या आप अनुमान लगा सकते हैं कि वे इतने नाम क्यों हैं? महत्वपूर्ण हिस्सा है कि वे असाइनमेंट में कैसे उपयोग किए जाते हैं। उदाहरण के लिए, आप ऐसा कर सकते हैं: j=i++;
या j=++i;
अब हम एक उदाहरण प्रयोग करेंगे:
// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;
// yes we could have already set the value to 5 before, but I chose not to.
i = 5;
j = i++;
k = ++i;
print(i, j, k);
//pretend this command prints them out nicely
//to the console screen or something, it's an example
I, j, और k के मान क्या हैं?
मैं आपको उत्तर दूंगा और आपको इसे काम करने दूंगा;)
i = 7, j = 5, k = 7;
यह पूर्व और बाद के वेतन वृद्धि ऑपरेटरों की शक्ति है, और उन्हें गलत उपयोग करने का खतरा है। लेकिन संचालन के उसी क्रम को लिखने का वैकल्पिक तरीका यहां है:
// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;
// yes we could have already set the value to 5 before, but I chose not to.
i = 5;
j = i;
i = i + 1; //post-increment
i = i + 1; //pre-increment
k = i;
print(i, j, k);
//pretend this command prints them out nicely
//to the console screen or something, it's an example
ठीक है, अब जब मैंने आपको दिखाया है कि ++
ऑपरेटर कैसे काम करता है, तो जांच करें कि यह काम क्यों नहीं करता है j+3
... याद रखें कि मैंने इसे पहले "शॉर्टहैंड" कैसे कहा था? बस यही है, दूसरा उदाहरण देखें, क्योंकि यह प्रभावी रूप से कमांड का उपयोग करने से पहले संकलक क्या करता है (यह उससे अधिक जटिल है, लेकिन यह पहले स्पष्टीकरण के लिए नहीं है)। तो आप देखेंगे कि "विस्तारित शॉर्टहैंड" के पास है i =
और i + 1
वह सब जो आपके अनुरोध पर है।
यह गणित में वापस जाता है। एक फ़ंक्शन परिभाषित किया गया है जहां f(x) = mx + b
या एक समीकरण y = mx + b
तो हम क्या कहते हैं mx + b
... यह निश्चित रूप से एक फ़ंक्शन या समीकरण नहीं है। अधिक से अधिक यह एक अभिव्यक्ति है। जो सब j+3
है, एक अभिव्यक्ति है। असाइनमेंट के बिना एक अभिव्यक्ति हमें अच्छा नहीं करती है, लेकिन यह CPU समय लेती है (यह मानते हुए कि कंपाइलर इसे ऑप्टिमाइज़ नहीं करता है)।
मुझे उम्मीद है कि आपके लिए चीजों को स्पष्ट करता है और आपको नए प्रश्न पूछने के लिए कुछ जगह देता है। चियर्स!
आपके उदाहरण में, j+=3
3 से वेतन वृद्धि।
(यहाँ कहने के लिए और कुछ नहीं है, अगर यह सिंटैक्स संबंधित है तो मैं पहले Googling का सुझाव दूंगा, लेकिन मैं यहां नया हूं इसलिए मैं गलत हो सकता हूं।)
j+3
जो नहीं है वास्तव में वेतन वृद्धि j
। ओपी को इस्तेमाल करना चाहिए j += 3
।
for(j = 0; j<=90; j = j+3)
{
}
j+3
j को नया मान प्रदान नहीं करेगा, जोड़ j j=j+3
को नया मान प्रदान करेगा और लूप 3 तक बढ़ जाएगा।
j++
यह कहने जैसा है j = j+1
, इसलिए उस स्थिति में आपका नया मान केवल ऊपर वाले की तरह j को असाइन करना।
परिवर्तन
for(j = 0; j<=90; j+3)
सेवा
for(j = 0; j<=90; j=j+3)
बस यह कोशिश करो
for(int i=0; i<5; i=i+2){//value increased by 2
//body
}
या
for(int i=0; i<5; i+=2){//value increased by 2
//body
}
आप कोड भी लिख सकते हैं
for(int i=0;i<n;i++)
{
//statements;
i=i+2;//cause you want to increment i by 3
}
for(j = 0; j<=90; j++){}
j ++ का अर्थ है j = j + 1, j value पहले से ही अब हम 1 जोड़ रहे हैं इसलिए अब j + 1 का योग 1 बन गया है, आखिरकार हम j मान (0) को ओवर वैल्यू (1) के साथ ओवरराइड कर रहे हैं इसलिए हम यहाँ हैं j मान को j + 1 से ओवरराइड करना। इसलिए प्रत्येक पुनरावृत्ति j मान 1 से बढ़ाई जाएगी।
for(j = 0; j<=90; j+3){}
यहाँ j + 3 का मतलब j मान पहले से ही है अब हम 3 जोड़ रहे हैं इसलिए अब j + 3 का योग 3 बन गया है लेकिन हम मौजूदा j मान को ओवरराइड नहीं कर रहे हैं। ताकि JVM प्रोग्रामर से पूछ रहे हैं, आप नए मान की गणना कर रहे हैं, लेकिन जहां आप उस मान को एक चर (यानी j) में असाइन कर रहे हैं। इसलिए हमें संकलन-समय त्रुटि "अमान्य असाइनमेंटऑपरेटर" मिल रही है।
अगर हम j मान को 3 से बढ़ाना चाहते हैं तो हम निम्नलिखित में से किसी एक का उपयोग कर सकते हैं।
for (int j=0; j<=90; j+=3) --> here each iteration j value will be incremented by 3.
for (int j=0; j<=90; j=j+3) --> here each iteration j value will be incremented by 3.
लूप स्टेटमेंट के "इंक्रीमेंट" भाग को किसी भी प्रभाव के लिए इंडेक्स वेरिएबल के मान को बदलना पड़ता है। "++ j" का लॉन्गहैंड फॉर्म "j = j + 1" है। इसलिए, जैसा कि अन्य उत्तरों में कहा गया है, आपके वेतन वृद्धि का सही रूप "j = j + 3" है, जिसमें एक शॉर्टहैंड के रूप में एक के रूप में वेतन वृद्धि नहीं है। "j + 3", जैसा कि आप अब तक जानते हैं, वास्तव में j नहीं बदलता है; यह एक अभिव्यक्ति है जिसके मूल्यांकन का कोई प्रभाव नहीं है।
यदि आपके पास इस तरह से एक लूप है:
for(j = 0; j<=90; j++){}
इस लूप में आप जावा भाषा द्वारा दिए गए शॉर्टहैंड का उपयोग कर रहे हैं, जिसका अर्थ है एक पोस्टफ़िक्स ऑपरेटर (उपयोग-तब-परिवर्तन) जो j = j + 1 के बराबर है, इसलिए परिवर्तित मान को आरंभिक और अगले ऑपरेशन के लिए उपयोग किया जाता है।
for(j = 0; j<=90; j+3){}
इस लूप में आप केवल 3 से अपने मूल्य में वृद्धि कर रहे हैं, लेकिन इसे वापस जे वेरिएबल में इनिशियलाइज़ नहीं कर रहे हैं, इसलिए j का मान परिवर्तित रहता है।
यह सिर्फ एक सिंटैक्स त्रुटि है। तुम बस बदलने के लिए j+3
द्वारा j=j+3
या j+=3
।