Preciso limpar um sinal aqui e ele não limpa.
Explique melhor, por gentileza.
Eu apaguei o sinal - e ele continua no cmd, eu não entendi
Nem eu, fala pra a gente o que você quer fazer e como você fez
eu reiniciei o programa e o PC , vou ver se deu certo aqui
Ok, mas e se o número for negativo? Vc pode fazer um replace pra tirar isso
Cara, pergunta idiota, o que é um replace ?
Que isso, não é idiota, foi erro meu falar assim por cima.
Vamos supor que você quer tirar uma letra de uma frase
String teste = "Ola amigo, tudo bem?";
Se quisermos tirar a letra “o”, é só usar o replace.
System.out.println(teste.replace("o", "");
Há casos que você pode trocar uma letra por outra, aí fica:
System.out.println(teste.replace("o", "a");
Você não pode usar o replace com inteiro, mas pode converter pra String
System.out.println(String.valueOf(aux).replace("-", "");
não sabia disso, obrigado ai
É porque o valor calculado estrapolou a magnitude de um int.
Não adianta você simplesmente remover o sinal, você tem que entender o motivo desse número estar negativo.
Se você remover o sinal, o número continuará errado.
Você declarou as variáveis a, b e aux como sendo do tipo int.
O tipo int possui 4 bytes (32 bits) isto significa que o maior valor positivo que ele pode armazenar, em binário, é:
01111111 11111111 11111111 11111111
byte 3 byte 2 byte 1 byte 0
Isso corresponde ao número decimal:
2.147.483.647
Na sua sequência de Fibonacci depois do número 1.836.311.903 viria o número 2.971.215.073, que em binário corresponde à:
10110001 00011001 00100100 11100001
byte 3 byte 2 byte 1 byte 0
Para o tipo de dado int, esse valor corresponde à:
-1.323.752.223
Porque ficou negativo?
Porque o bit mais à esquerda é utilizado para identificar o sinal, onde 0 indica que o número é positivo e 1 indica que o número é negativo.
Para você resolver o problema do seu cálculo, você terá de trocar as variáveis a, b e aux de int para long.
O long possui 8 bytes (64 bits), dessa forma o número 2.971.215.073 em binário será:
00000000 00000000 00000000 00000000 10110001 00011001 00100100 11100001
byte 7 byte 6 byte 5 byte 4 byte 3 byte 2 byte 1 byte 0
Ou seja, o bit mais à esquerda continuará com 0, identificando um número positivo, aí o resultado decimal estará correto.
