Como que instancia um objeto da classe BigInteger com o número 1?
[code]public Static BigInteger calculaFatorial (int n) {
BigInteger total = new BigInteger();
/Aki eu não sei como instanciar com o número 1 já.
Se eu fizer isso e fizer total.add(1) ele fica com 1?/
while (n >= 1) {
total.multiply(n);
n–;
}
return total;
}[/code]
Esse é um método que calcula fatorial de QUALQUER número arbitrário…eu fiz um com double, mas ele calcula até, no máximo, 170.
Brother, dê uma olhada nos construtores e escolha o que mais lhe convier. Esse aqui, por exemplo. No seu caso, você vai querer tambem dá uma olhada nessa constante.
Há 2 erros aqui
a) O construtor de BigInteger requer uma string ou um double. No seu caso, passe uma string ("1") ou use a constante BigInteger.ONE.
b) BigIntegers, como Strings, são objetos imutáveis, então você tem sempre de atribuir à variável o valor resultante de uma operação.
public Static BigInteger calculaFatorial (int n) {
BigInteger total = BigInteger.ONE;
while (n >= 1) {
total = total.multiply(new BigInteger (n)); // <--
n--;
}
return total;
}
[quote=thingol]Há 2 erros aqui
a) O construtor de BigInteger requer uma string ou um double. No seu caso, passe uma string ("1") ou use a constante BigInteger.ONE.
b) BigIntegers, como Strings, são objetos imutáveis, então você tem sempre de atribuir à variável o valor resultante de uma operação.
[code]
public Static BigInteger calculaFatorial (int n) {
BigInteger total = BigInteger.ONE;
while (n >= 1) {
total = total.multiply(new BigInteger (n)); // <–
n–;
}
return total;
}
[/code][/quote]
Aham, falha nossa - o construtor de BigInteger exige uma string ou então um double. Eu passei um int. Converta esse int para uma string, e tente novamente.
É por isso que o pessoal do C# criou aquela classe System.Convert.
Em Java você precisa saber que para converter uma string para um inteiro você precisa usar Integer.parseInt e um inteiro em uma String, usar String.valueOf, ou talvez String.format, ou concatenar com uma string vazia (""), ou Integer.toString(), ou sei lá o quê. É sempre com um nome diferente e em lugares diferentes.
Em C# basta usar Convert.ToInt32() para converter várias coisas para um int, e Convert.ToString() para converter várias coisas para uma String. Não tem essa confusão toda de ter de olhar páginas e páginas de documentação
Mas já havia conseguido…nem precisei…pois eu recebo o dado por Scanner…é só receber uma String e criar um BigInteger com essa String…
PORÉM…tenho um outro problema agora…
[quote]
Digite o valor que voce gostaria de calcular o
fatorial:
34
34! = 295232799039604140847618609643520000000
Gostaria de calcular outro fatorial?
1 - Sim, 0 - Não
1
Digite o valor que voce gostaria de calcular o java.lang.NumberFormatException: Zero length BigInteger
at java.math.BigInteger.<init>(Unknown Source)
at java.math.BigInteger.<init>(Unknown Source)
at Fatorial.inicio(Fatorial.java:34)
fatorial:[/quote]
Esse erro acontece e não sei pq…
O laço que está isso está aqui…
[code]while (true) {
System.out.println(“Digite o valor que voce gostaria de calcular o”);
System.out.println(“fatorial:”);
String valor = input.nextLine();
BigInteger valorBI = new BigInteger(valor); //Essa é a linha 34...
System.out.println (valor + "! = " + calculaFatorial(valorBI).toString());
System.out.println("\n\nGostaria de calcular outro fatorial?");
System.out.println("1 - Sim, 0 - Não");
int opcao = input.nextInt();
boolean escolha = true;
while (escolha == true) {
if (opcao == 0) {
System.exit(0);
}
else if (opcao == 1) {
escolha = false; //Aqui é pra sair do laço
valor = null; //Aqui é pra String valor ser "resetada"
valorBI = BigInteger.ZERO; //Aqui é pra zerar o valor do valorBI
}
else {
System.out.println("Opcao invalida! Tenta novamente!");
opcao = input.nextInt();
}
}
}[/code]
a => String
c => int
a + c => Usado o operador “+” de concatenação, não o operador “+” de soma. O resultado é uma String
String => não pode ser jogada diretamente em um int (b).
Se pudesse, ia dar “100” (como em Javascript), não 10 (como você está esperando).