У меня есть этот кусок кода, который не работает:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Переменная sum всегда равна 0. Что я делаю не так?
java
biginteger
см.
источник
источник
int
, поэтому вам не нужноBigInteger
для этого примера.Ответы:
BigInteger
неизменен. Javadocs утверждает, что add () «[r] переворачивает BigInteger, значение которого (this + val)». Таким образом, вы не можете изменитьsum
, вам нужно переназначить результатadd
методаsum
переменной.источник
BigInteger
Класс является неизменным, следовательно , вы не можете изменить свое состояние. Поэтому вызов «add» создает новыйBigInteger
, а не модифицирует текущий.источник
Другие ответы прибили это; BigInteger является неизменным. Вот небольшое изменение, чтобы этот код работал.
источник
BigInteger является неизменным классом. Поэтому, когда вы делаете какую-либо арифметику, вы должны переназначить вывод переменной.
источник
java.math.BigInteger
является неизменным классом, поэтому мы не можем назначить новый объект в месте расположения уже назначенного объекта. Но вы можете создать новый объект для назначения нового значения, например:источник
Да, это неизменно
поэтому метод add () класса BigInteger не добавляет новое значение BigIntger к своему собственному значению, но создает и возвращает новую ссылку BigInteger без изменения текущего BigInteger, и это то, что делается даже в случае строк
источник
На самом деле вы можете использовать,
для создания объекта для класса BigInteger. Но проблема здесь в том, что вы не можете дать переменную в двойных кавычках. Так что нам нужно использовать метод valueOf (), и мы должны снова сохранить ответ в этой сумме. Так что мы напишем,
источник
Biginteger
неизменный класс. Вам необходимо явно присвоить значение вашего вывода сумме следующим образом:источник
Поскольку вы суммируете некоторые значения int вместе, нет необходимости использовать BigInteger.
long
для этого достаточно.int
32 бита, аlong
64 бита, которые могут содержать сумму всех значений int.источник