Tôi có đoạn mã này không hoạt động:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Biến tổng luôn là 0. Tôi đang làm gì sai?
Tôi có đoạn mã này không hoạt động:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Biến tổng luôn là 0. Tôi đang làm gì sai?
Câu trả lời:
BigInteger
là bất biến. Các javadocs tuyên bố rằng thêm () "[r] thay thế một BigInteger có giá trị là (this + val)." Do đó, bạn không thể thay đổi sum
, bạn cần gán lại kết quả của add
phương thức để sum
biến.
sum = sum.add(BigInteger.valueOf(i));
Các câu trả lời khác đã đóng đinh nó; BigInteger là bất biến. Đây là thay đổi nhỏ để làm cho mã đó hoạt động.
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum = sum.add(BigInteger.valueOf(i));
}
}
BigInteger là một lớp bất biến. Vì vậy, bất cứ khi nào bạn thực hiện bất kỳ số học nào, bạn phải gán lại đầu ra cho một biến.
Vâng, nó là bất biến
sum.add(BigInteger.valueOf(i));
vì vậy, phương thức add () của lớp BigInteger không thêm giá trị BigIntger mới vào giá trị riêng của nó, nhưng tạo và trả về một tham chiếu BigInteger mới mà không thay đổi BigInteger hiện tại và đây là điều được thực hiện ngay cả trong trường hợp của String
Trên thực tế bạn có thể sử dụng,
BigInteger sum= new BigInteger("12345");
để tạo đối tượng cho lớp BigInteger. Nhưng vấn đề ở đây là, bạn không thể đưa ra một biến trong dấu ngoặc kép. Vì vậy, chúng ta phải sử dụng phương thức valueOf () và chúng ta phải lưu lại câu trả lời trong tổng đó. Chúng ta sẽ viết,
sum= sum.add(BigInteger.valueOf(i));
Biginteger
là một lớp bất biến. Bạn cần gán rõ ràng giá trị đầu ra của mình để tính tổng như thế này:
sum = sum.add(BigInteger.valueof(i));
Vì bạn đang tổng hợp một số giá trị int với nhau, không cần sử dụng BigInteger. long
là đủ cho điều đó int
là 32 bit, trong khi long
là 64 bit, có thể chứa tổng của tất cả các giá trị int.
int
, vì vậy bạn không cầnBigInteger
ví dụ này.