मेरे पास यह कोड है, जो काम नहीं कर रहा है:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
योग चर हमेशा 0. मैं गलत क्या कर रहा हूँ?
मेरे पास यह कोड है, जो काम नहीं कर रहा है:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
योग चर हमेशा 0. मैं गलत क्या कर रहा हूँ?
जवाबों:
BigInteger
अपरिवर्तनीय है। Javadocs में कहा गया है कि () "[r] एक बिगइंटर बनाता है जिसका मूल्य (यह + वैल) है।" इसलिए, आप बदल नहीं सकते हैं sum
, आपको चर के add
तरीके के परिणाम को फिर से असाइन करने की आवश्यकता है sum
।
sum = sum.add(BigInteger.valueOf(i));
BigInteger एक अपरिवर्तनीय वर्ग है। इसलिए जब भी आप कोई अंकगणित करते हैं, तो आपको आउटपुट को एक चर पर फिर से असाइन करना होगा।
हाँ, यह अपरिवर्तनीय है
sum.add(BigInteger.valueOf(i));
इसलिए BigInteger वर्ग का मेथड ऐड () अपने स्वयं के मूल्य में नया BigIntger वैल्यू नहीं जोड़ता है, लेकिन वर्तमान BigInteger को बदले बिना एक नया BigInteger संदर्भ बनाता है और लौटाता है और स्ट्रिंग्स के मामले में भी ऐसा ही होता है
वास्तव में आप उपयोग कर सकते हैं,
BigInteger sum= new BigInteger("12345");
BigInteger class के लिए ऑब्जेक्ट बनाने के लिए। लेकिन यहाँ समस्या यह है कि, आप दोहरे कोट्स में एक वैरिएबल नहीं दे सकते हैं। तो हमें valueOf () विधि का उपयोग करना होगा और हमें उस योग में उत्तर को फिर से स्टोर करना होगा। इसलिए हम लिखेंगे,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
एक अपरिवर्तनीय वर्ग है। आपको अपने आउटपुट के मूल्य को इस तरह स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है:
sum = sum.add(BigInteger.valueof(i));
चूंकि आप कुछ अंतर मानों को एक साथ जोड़ रहे हैं, इसलिए बिगइंटर का उपयोग करने की कोई आवश्यकता नहीं है। long
उसके लिए पर्याप्त है। int
32 बिट्स है, जबकि long
64 बिट्स है, जिसमें सभी इंट वैल्यू का योग हो सकता है।
int
, इसलिए आपकोBigInteger
इस उदाहरण की आवश्यकता नहीं है ।