Saya memiliki kode ini, yang tidak berfungsi:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Variabel penjumlahan selalu 0. Apa yang saya lakukan salah?
Saya memiliki kode ini, yang tidak berfungsi:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Variabel penjumlahan selalu 0. Apa yang saya lakukan salah?
Jawaban:
BigIntegertidak kekal. Javadocs menyatakan bahwa add () "[r] membuat BigInteger yang nilainya (this + val)." Oleh karena itu, Anda tidak dapat mengubah sum, Anda perlu menetapkan kembali hasil addmetode ke sumvariabel.
sum = sum.add(BigInteger.valueOf(i));
BigInteger adalah kelas yang tidak dapat diubah. Jadi, setiap kali Anda melakukan aritmatika, Anda harus menetapkan kembali output ke variabel.
Ya itu tidak berubah
sum.add(BigInteger.valueOf(i));
jadi metode add () dari kelas BigInteger tidak menambahkan nilai BigIntger baru ke nilainya sendiri, tetapi membuat dan mengembalikan referensi BigInteger baru tanpa mengubah BigInteger saat ini dan inilah yang dilakukan bahkan dalam kasus Strings
Sebenarnya kamu bisa menggunakan,
BigInteger sum= new BigInteger("12345");
untuk membuat objek untuk kelas BigInteger.Tapi masalahnya di sini adalah, Anda tidak dapat memberikan variabel dalam tanda kutip ganda. Jadi kita harus menggunakan metode valueOf () dan kita harus menyimpan jawabannya dalam jumlah itu lagi. Jadi kita akan menulis,
sum= sum.add(BigInteger.valueOf(i));
Bigintegeradalah kelas yang tidak berubah. Anda harus secara eksplisit menetapkan nilai output Anda ke jumlah seperti ini:
sum = sum.add(BigInteger.valueof(i));
Karena Anda menjumlahkan beberapa nilai int bersama, tidak perlu menggunakan BigInteger. longsudah cukup untuk itu. intadalah 32 bit, sedangkan long64 bit, yang dapat berisi jumlah semua nilai int.
int, jadi Anda tidak perluBigIntegeruntuk contoh ini.