Java.lang.NumberFormatException: For input string: ""

11 respostas
santosmm

Alguém pode me explicar porque ao compilar surge o erro

java.lang.NumberFormatException: For input string: ""

/*	
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package eleicao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 *
 * @author santosmm
 */
public class Apuracao {

    /**
     * @param args the command line arguments
     */
    static StringBuffer memoria = new StringBuffer();

    public static void main(String[] args) {
        // TODO code application logic here
        try {
            String arquivo = EscolherArquivo.caminho();
            BufferedReader arqentrada;
            String linha = null;
            int numero = 0;
            int contZe = 0;
            int contCreuza = 0;
            int contAfranio = 0;
            int contVB = 0;
            int contOutros = 0;
            arqentrada = new BufferedReader(new FileReader(arquivo));
            while ((linha = arqentrada.readLine()) != null) {
                numero = Integer.parseInt(linha);
                if (numero == 1) {
                    contZe = contZe + 1;
                }else if (numero == 2) {
                    contCreuza++;
                } else if (numero == 3) {
                    contAfranio++;
                } else if (numero == 0) {
                    contVB++;
                } else{
                    contOutros++;
                }
            }
            System.out.println("O número de votos de Zé é " + contZe);
            System.out.println("O número de votos de Creuza é " + contCreuza);
            System.out.println("O número de votos de Afrânio é " + contAfranio);
            System.out.println("O número de votos de em Branco é " + contVB);
            System.out.println("O número de votos nulos é " + contOutros);
            arqentrada.close();
        }catch(NumberFormatException f){
          System.out.println(f);
        }
        catch (IOException e) {
            System.out.println("Erro: " + e.toString());
        }

    }
}

11 Respostas

CrOnNoS
O erro é bem auto-sugestivo. Levando em conta que você  passou essa parte do código, o erro deve estar aqui:

while ((linha = arqentrada.readLine()) != null) {

numero = Integer.parseInt(linha);

Sendo assim, o seu método arqentrada.readLine está lendo uma linha que contém nada (só o caractere de fim de linha). Então a sua variável linha fica com o valor “” que não é um valor numérico e faz o método parseInt gerar essa excessão.
Para evitar isso você tem que garantir que nunca chegue este valor “” ao método parseInt

santosmm

Desculpe minha ignorância mais como faria isso!?
Estou iniciando ainda no mundo JAVA!

CrOnNoS

Algumas formas:

while ((linha = arqentrada.readLine()) != null) { if (!linha.equals("")) { numero = Integer.parseInt(linha); if (numero == 1) { contZe = contZe + 1; } else if (numero == 2) { contCreuza++; } else if (numero == 3) { contAfranio++; } else if (numero == 0) { contVB++; } else { contOutros++; } } }
Adicionei um “if” para não permitir que entre no trecho de código que use o parse caso o valor de linha seja “”

while ((linha = arqentrada.readLine()) != null) { if (!linha.equals("")) linha = "0"; numero = Integer.parseInt(linha);
Caso linha seja “”, você pode atribuir um valor default a variável que seria aceito pelo parse (mas não parece que serve para esse caso).

Não conheço esse seu “agendaentrada” mas parece ser um arquivo. Você pode, antes de escrever nele, garantir que o valor sendo escrito SEJA numérico. Isso evitaria valores não numéricos na leitura depois.

santosmm

Pois é…na verdade o arquivo só contem número e nem fiz um método para ler o arquivo.
Meu método apenas faz a leitura dos dados.Mas o problema persiste…

romarcio

Uma coisa que notei, que poderá acarretar em erro.
Você criou uma string e atribuiu null para ela.

String linha = null;

Dai você criou uma variavel do tipo int.

int numero = 0;

Então você faz isso:

numero = Integer.parseInt(linha);

Como a sua linha = null, e você está tentando transformar um null em inteiro, pode dar erro.
E outra, o tipo de dados int, não aceita null, para aceitar null deve ser integer.

santosmm

Conforme você falou mudei de int para Integer, mas o erro continua.

M

Eu tenho uma sugestão: use Scanner.

Com Scanner, você faz:

Scanner arqentrada = new Scanner(arquivo); // já criei o Scanner
while (arqentrada.hasNextInt()) {
    int i = arqentrada.nextInt(); // pronto! já tenho o número inteiro aqui
    // faço o que for preciso
}
santosmm

Galera muito obrigado, mas já encontrei a solução.
Ao invés de eu converter o String para int , fiz apenas uma comparação de caracter…olhem o código abaixo

public static void main(String[] args) { // TODO code application logic here try { String arquivo = EscolherArquivo.caminho(); BufferedReader arqentrada; String linha = null; //String numero = double contZe = 0; double contCreuza = 0; double contAfranio = 0; double contVB = 0; double contOutros = 0; arqentrada = new BufferedReader(new FileReader(arquivo)); while ((linha = arqentrada.readLine()) != null) { // numero = Integer.parseInt(linha); if (linha.equals("1")) { contZe++; } else if (linha.equals("2")) { contCreuza++; } else if (linha.equals("3")) { contAfranio++; } else if (linha.equals("0")) { contVB++; } else { contOutros++; } }

O

Se este bloco else significa “qualquer outra coisa (String)” o programa está correto, se quer dizer “qualquer outro número”, o resultado pode estar errado.

renamed

santosmm cuidado!

Foi apresentado um erro que ele não conseguiu converter um “” para um número… ou seja, nesse código que vc colocou, toda vez que ele encontra um “” ele cai no else…

while ((linha = arqentrada.readLine()) != null) { try { if (!linha.equals("")) { numero = Integer.parseInt(linha); if (numero == 1) { contZe = contZe + 1; } else if (numero == 2) { contCreuza++; } else if (numero == 3) { contAfranio++; } else if (numero == 0) { contVB++; } else { contOutros++; } } // end if } catch (Exception e) { System.err.println("Warning: " + e.getMessage()); } // end try } // end while

veja se esse codigo acima te ajuda!

santosmm

Cara muito obrigado, não tinha observado isso.
Realmente seu código ajudo bastante…

Criado 14 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 11
Participantes 6