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?
java
biginteger
cc
sumber
sumber
int
, jadi Anda tidak perluBigInteger
untuk contoh ini.Jawaban:
BigInteger
tidak kekal. Javadocs menyatakan bahwa add () "[r] membuat BigInteger yang nilainya (this + val)." Oleh karena itu, Anda tidak dapat mengubahsum
, Anda perlu menetapkan kembali hasiladd
metode kesum
variabel.sumber
The
BigInteger
kelas adalah kekal, maka Anda tidak dapat mengubah keadaan. Jadi panggilan "tambah" menciptakan yang baruBigInteger
, daripada mengubah arus.sumber
Balasan lain telah berhasil melakukannya; BigInteger tidak bisa diubah. Inilah perubahan kecil untuk membuat kode itu berfungsi.
sumber
BigInteger adalah kelas yang tidak dapat diubah. Jadi, setiap kali Anda melakukan aritmatika, Anda harus menetapkan kembali output ke variabel.
sumber
java.math.BigInteger
adalah kelas yang tidak dapat diubah sehingga kita tidak dapat menetapkan objek baru di lokasi objek yang sudah ditetapkan. Tetapi Anda dapat membuat objek baru untuk menetapkan nilai baru seperti:sumber
Ya itu tidak berubah
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
sumber
Sebenarnya kamu bisa menggunakan,
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,
sumber
Biginteger
adalah kelas yang tidak berubah. Anda harus secara eksplisit menetapkan nilai output Anda ke jumlah seperti ini:sumber
Karena Anda menjumlahkan beberapa nilai int bersama, tidak perlu menggunakan BigInteger.
long
sudah cukup untuk itu.int
adalah 32 bit, sedangkanlong
64 bit, yang dapat berisi jumlah semua nilai int.sumber