Eu tenho este pedaço de código, que não está funcionando:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
A variável sum é sempre 0. O que estou fazendo de errado?
java
biginteger
cc.
fonte
fonte
int
, portanto você não precisaBigInteger
deste exemplo.Respostas:
BigInteger
é imutável. O javadocs afirma que add () "[r] retorna um BigInteger cujo valor é (this + val)." Portanto, você não pode alterarsum
, é necessário reatribuir o resultado doadd
método parasum
variável.fonte
A
BigInteger
classe é imutável, portanto você não pode mudar seu estado. Assim, chamar "add" cria um novoBigInteger
, em vez de modificar o atual.fonte
Outras respostas acertaram em cheio; BigInteger é imutável. Aqui está a pequena alteração para fazer esse código funcionar.
fonte
BigInteger é uma classe imutável. Portanto, sempre que você fizer qualquer aritmética, é necessário reatribuir a saída a uma variável.
fonte
java.math.BigInteger
é uma classe imutável, portanto não podemos atribuir novo objeto no local do objeto já atribuído. Mas você pode criar um novo objeto para atribuir um novo valor, como:fonte
Sim, é imutável
portanto, o método add () da classe BigInteger não adiciona o novo valor BigIntger ao seu próprio valor, mas cria e retorna uma nova referência BigInteger sem alterar o BigInteger atual e é isso que foi feito mesmo no caso de Strings
fonte
Na verdade você pode usar,
Para criar um objeto para a classe BigInteger.Mas o problema aqui é que você não pode fornecer uma variável entre aspas duplas.Por isso, precisamos usar o método valueOf () e armazenar a resposta nessa soma novamente.
fonte
Biginteger
é uma classe imutável. Você precisa atribuir explicitamente o valor da sua saída para somar assim:fonte
Como você está resumindo alguns valores int juntos, não há necessidade de usar o BigInteger.
long
é o suficiente para isso.int
é de 32 bits, enquantolong
é de 64 bits, que pode conter a soma de todos os valores int.fonte