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.