Boas colegas. Estou a tentar reforçar os meus conhecimentos em java então decide pegar um livro e estuda-lo… Num dos exercícios de fatorial ao executar o codigo dá o seguinte erro: Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:662) at java.base/java.lang.Integer.parseInt(Integer.java:770) at cap5exercices.example1.Fatorial.main(Fatorial.java:19)
A linha na qual aponta para o erro é esta: int n = Integer.valueOf(s).intValue(); //variavel ira converter a valor na posicao 0 da string s
O código inteiro é:
public static void main(String[] args) throws IOException {
String s = "";
int k; //variavel de controlo
char c; //armazenara o numero do teclado
long total = 1;
//asking for a number
System.out.println("Qual e o numero?");
while ((c = (char) System.in.read()) != 10) { // onde 10 igual a enter considerar caracteres na posicao 0
s += c;
s = s.substring(0, s.length()-1); //elimina o lixo no final da string
int n = Integer.valueOf(s).intValue(); //variavel ira converter a valor na posicao 0 da string s
for (k = n; k>=1; k--) { //achar o fatorial
total *= k; //total ira multiplicar com os valores que a variavel de controlo ira obtendo
System.out.println(n + "! = " + total); //exibicao do resultado na console
}
}
}
Revisei o código e não vi diferença alguma, e no livro não aborda sobre o erro…
Na verdade, agora que eu reparei que é String s = "" e não String s = " ". Enquanto a primeira representa uma string vazia, a segunda representa um espaço. Logo:
s += c -> c.
Dá para fazer assim:
public class Teste {
public static void main(String[] args) throws java.io.IOException{
char leitura;
int controle;
int numero;
long total = 1;
String string = "";
System.out.print("Qual é o número?\nValor informado: ");
while((leitura = (char) System.in.read()) != 10){
if(Character.isDigit(leitura)){
string += leitura;
string = string.substring(0, string.length());
numero = Integer.valueOf(string).intValue();
for(controle = numero; controle >= 1; controle--){
total *= controle;
}
System.out.println(numero + "! = " + total);
}
}
}
}
Obrigado! Com base no seu código consegui superar o erro. As alterações:
Retirei -1 da linha s = s.substring(0, s.length()-1); e;
Retirei a linha dentro da estrutura for responsável por enviar para a tela o resultado, para fora da estrutura System.out.println(n + "! = " + total);