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