Pergunta

Eu tenho um problema com a classe Java BigInteger: Eu não pode colar um grande valor em BigInteger. Por exemplo, digamos que eu quero atribuir um BigInteger para este número:

26525285981219105863630848482795

Eu não posso atribuí-lo diretamente, porque o compilador acha que é um inteiro:

val bi = 26525285981219105863630848482795 //compile error

Mas eu quero que ele seja um BigInteger. Existe alguma maneira de ser capaz de colar diretamente esta no código-fonte? Se não existe tal maneira, então há uma maneira em Scala, que tem um muito mais fácil de classe de uso BigInt? Obrigado pela ajuda.

Foi útil?

Solução

rtperson é é correta do ponto de vista Java, mas em Scala você pode fazer mais com scala.BigInts do que o que você pode fazer com java.math.BigIntegers.

Por exemplo:

scala> val a = new BigInteger("26525285981219105863630848482795");
a: java.math.BigInteger = 26525285981219105863630848482795

scala> a + a
:7: error: type mismatch;
found   : java.math.BigInteger
required: String
       a + a

A forma canônica no Scala para instanciar uma classe é usar uma fábrica localizada na companheiro objeto . Quando você escreve Foo (args) em Scala, este é traduzido para Foo.apply (args), onde Foo é um objeto singleton - o objeto companheiro. Então, para encontrar as maneiras de construir BigInts você poderia ter um olhar para o objeto BigInt na biblioteca Scala, e especificamente na construção apply.

Assim, três maneiras de construir um BigInt são: passá-lo um Int, um Long ou um String para analisar. Exemplo:

scala> val x = BigInt(12)
x: BigInt = 12

scala> val y = BigInt(12331453151315353L)
y: BigInt = 12331453151315353

scala> val z = BigInt("12124120474210912741099712094127124112432")
z: BigInt = 12124120474210912741099712094127124112432

scala> x + y * z
res1: BigInt = 149508023628635151923723925873960750738836935643459768508

Observe a coisa agradável que você pode fazer operações aritméticas olhando naturais com um BigInt, o que não é possível com um BigInteger!

Outras dicas

Isso deve funcionar:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger lê cordas e analisa-los para o número correto. Devido a isso, você vai querer verificar para fora java.text.NumberFormat.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top