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



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



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


переменная sum всегда равна 0. Что я делаю не так?

443   9  

9 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BigInteger sum= new BigInteger("12345");

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

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

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

Comments

    Ничего не найдено.