আমার কাছে কোডের এই টুকরা রয়েছে, যা কাজ করছে না:
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
অপরিবর্তনীয় জাভাডোকস জানিয়েছে যে () "[r] একটি বিগইন্টেগারকে যুক্ত করে যার মান (এটি + ভাল)" " অতএব, আপনি পরিবর্তন করতে পারবেন না sum
, আপনার add
পদ্ধতির ফলাফলটি পরিবর্তনশীলটিতে পুনরায় সাইন ইন করতে হবে sum
।
sum = sum.add(BigInteger.valueOf(i));
বিগইন্টিজার একটি অপরিবর্তনীয় শ্রেণি। সুতরাং আপনি যখনই কোনও পাটিগণিত করেন, আপনাকে আউটপুটটি একটি ভেরিয়েবলে পুনরায় সাইন করতে হবে।
হ্যাঁ এটি অপরিবর্তনীয়
sum.add(BigInteger.valueOf(i));
সুতরাং বিগইন্টেগার শ্রেণির মেথড অ্যাড () এর দ্বারা নিজস্ব মানটিতে নতুন বিগইন্টগার মান যুক্ত হয় না, তবে বর্তমান বিগইন্টিজার পরিবর্তন না করেই একটি নতুন বিগইন্টিজার রেফারেন্স তৈরি করে এবং প্রদান করে এবং স্ট্রিংসের ক্ষেত্রেও এটি ঘটেছিল
আসলে আপনি ব্যবহার করতে পারেন,
BigInteger sum= new BigInteger("12345");
বিগইন্টেগার ক্লাসের জন্য অবজেক্ট তৈরি করার জন্য। তবে এখানে সমস্যাটি হ'ল আপনি ডাবল কোটগুলিতে ভেরিয়েবল দিতে পারবেন না o সুতরাং আমাদেরকে ভ্যালুওএফ () পদ্ধতিটি ব্যবহার করতে হবে এবং আমাদের আবার সেই যোগফলটি সংরক্ষণ করতে হবে o সুতরাং আমরা লিখব,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
একটি অপরিবর্তনীয় বর্গ। এই জাতীয় সংখ্যার জন্য আপনার আউটপুটটির স্পষ্টতই মূল্য নির্ধারণ করতে হবে:
sum = sum.add(BigInteger.valueof(i));
যেহেতু আপনি কিছু অন্তর্নিহিত মানগুলি এক সাথে সংযুক্ত করছেন, তাই BigInteger ব্যবহার করার দরকার নেই। long
তার জন্য যথেষ্ট। int
32 বিট হয়, যখন long
b৪ বিট হয়, এতে সমস্ত ইনট মানগুলির যোগফল থাকতে পারে।
int
, সুতরাং আপনারBigInteger
এই উদাহরণের প্রয়োজন হবে না ।