Java: Как использовать BigInteger?

У меня есть эта часть кода, которая не работает:

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}

Переменная суммы всегда равна 0. Что я делаю неправильно?

Ответ 1

BigInteger является неизменным. В javadocs указано, что добавить() "[r] eturns BigInteger, чье значение (this + val)." Поэтому вы не можете изменить sum, вам нужно переназначить результат метода add на переменную sum.

sum = sum.add(BigInteger.valueOf(i));

Ответ 2

sum = sum.add(BigInteger.valueOf(i))

Класс BigInteger неизменен, поэтому вы не можете изменить его состояние. Поэтому вызов "add" создает новый BigInteger, вместо того, чтобы изменять текущий.

Ответ 3

Другие ответы прибили его; BigInteger неизменен. Здесь небольшое изменение для работы этого кода.

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum = sum.add(BigInteger.valueOf(i));
    }
}

Ответ 4

java.math.BigInteger - неизменный класс, поэтому мы не можем назначить новый объект в местоположении уже назначенного объекта. Но вы можете создать новый объект для назначения нового значения, например:

sum = sum.add(BigInteger.valueOf(i));

Ответ 5

BigInteger - неизменный класс. Поэтому всякий раз, когда вы выполняете какую-либо арифметику, вы должны переназначить вывод переменной.

Ответ 6

Да, он непреложный

sum.add(BigInteger.valueOf(i));

поэтому метод add() класса BigInteger не добавляет новое значение BigIntger к своему собственному значению, но создает и возвращает новую ссылку BigInteger без изменения текущего BigInteger и , это то, что сделано даже в случае строк

Ответ 7

Biginteger - непреложный класс. Вам нужно явно назначить значение вашего вывода таким образом:

sum = sum.add(BigInteger.valueof(i));    

Ответ 8

На самом деле вы можете использовать

BigInteger sum= new BigInteger("12345");

для создания объекта для класса BigInteger. Но проблема в том, что вы не можете дать переменную в двойных кавычках. Поэтому нам нужно использовать метод valueOf(), и мы должны сохранить ответ в этой сумме снова. Так мы будем писать,

sum= sum.add(BigInteger.valueOf(i));

Ответ 9

Поскольку вы суммируете некоторые значения int вместе, нет необходимости использовать BigInteger. long для этого достаточно. int - 32 бита, а long - 64 бита, который может содержать сумму всех значений int.