[RESOLVIDO]java.lang.NumberFormatException [+obrigado caio.gaspar]

12 respostas
F
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Candidatos {
	private Deputado[] dep;

	public Candidatos(int quanti, String listaDeDeputados)
			throws DeputadosException {
		
		try {
			if (quanti > 10)
				throw new DeputadosException(
						"Número maior que o máximo(10) de deputados.\n");
			dep = new Deputado[quanti];
			BufferedReader in = new BufferedReader(new FileReader(
					"listaDeDeputados.txt"));
			while (in.ready()) {
				for(int i = 0;i<quanti;i++){
					String[] tipo = in.readLine().split(": ");
					
					if (tipo.equals("Federal")) {
						String[] tempo = in.readLine().split(": ");
						String[] nome = in.readLine().split(": ");
						String[] idade = in.readLine().split(": ");
						String[] sexo = in.readLine().split(": ");
						String[] partido = in.readLine().split(": ");
						String[] numero = in.readLine().split(": ");
						String[] projeto = in.readLine().split(": ");
						
						dep[i] = new Federal(Integer.parseInt(tempo[1]), nome[1],Integer.parseInt(idade[1]), sexo[1], partido[1],
								Integer.parseInt(numero[1]), projeto[1]);
					} else {
						String[] estado = in.readLine().split(": ");
						String[] nome = in.readLine().split(": ");
						String[] idade = in.readLine().split(": ");
						String[] sexo = in.readLine().split(": ");
						String[] partido = in.readLine().split(": ");
						String[] numero = in.readLine().split(": ");
						String[] projeto = in.readLine().split(": ");
						dep[i] = new Estadual(estado[1], nome[1],Integer.parseInt(idade[1]), sexo[1], partido[1],
								Integer.parseInt(numero[1]), projeto[1]);
						
					}
				}
			}
			
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public Deputado[] getDep() {
		return dep;
	}

	public void setDep(Deputado d) {
		for (int i = 0; i < dep.length; i++)
			dep[i] = d;
	}

}

Classe de teste:

import java.util.Scanner;

public class Eleicao {
	public static void main(String args[]) throws DeputadosException {
		Scanner scanner = new Scanner(System.in);
		System.out.println("Insira a quantidade de deputados"
				+ ".\n QUANTIDADE MÁXIMA 10.");
		int quantidade = scanner.nextInt();
		Candidatos cand = new Candidatos(quantidade,"listaDeDeputados.txt");
		 int cont = 0;
		 
			 for(int i = 0;i<quantidade;i++){
				 System.out.println(cont++ + cand.getDep()[i].getNome()+"\n"+cand.getDep()[i].getNumero());
				 
			 }
O erro que está acontecendo:
Exception in thread "main" java.lang.NumberFormatException: For input string: "Pafúncio"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Candidatos.<init>(Candidatos.java:41)
	at Eleicao.main(Eleicao.java:9)

Alugém pode me dar uma luz do pq este erro está ocorrendo? :D

12 Respostas

evertonsilvagomesjav

Voce ta tentando atribuir esse Pafuncio que é uma String ao um int.

Algum desses Integer.parseInt(…) esta gerando á exceção.

Danillo_Moreno

Analise o erro:

java.lang.NumberFormatException: For input string: "Pafúncio"

Em algum lugar do arquivo que vc está lendo, está escrito Pafuncio onde deveria ter um numero…

Converter Pafuncio pra inteiro não dá…

Espero ter ajudado…

caio.gaspar

tenta degubar o código… fica mais facil…

F
caio.gaspar:
tenta degubar o código... fica mais facil...
Já debuguei, parece estar tudo correto, porém ainda persiste o erro.

Mudei o código assim:

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

public class Candidatos {
	private Deputado[] dep;

	public Candidatos(int quanti, String listaDeDeputados)
			throws DeputadosException {
		int i = 0;
		try {
			if (quanti > 10)
				throw new DeputadosException(
						"Número maior que o máximo(10) de deputados.\n");
			dep = new Deputado[quanti];
			BufferedReader in = new BufferedReader(new FileReader(
					"listaDeDeputados.txt"));
			while (in.ready()) {
				
					String[] tipo = in.readLine().split(": ");
					
					if (tipo[tipo.length-1].equals("Federal")) {
						
						String[] tempo = in.readLine().split(": ");
						String[] nome = in.readLine().split(": ");
						String[] idade = in.readLine().split(": ");
						String[] sexo = in.readLine().split(": ");
						String[] partido = in.readLine().split(": ");
						String[] numero = in.readLine().split(": ");
						String[] projeto = in.readLine().split(": ");
						int t = Integer.parseInt(tempo[1]);
						int id = Integer.parseInt(idade[1]);
						int n = Integer.parseInt(numero[1]);
						dep[i] = new Federal(t, nome[1],id, sexo[1], partido[1],
								n, projeto[1]);
						i++;
					} else {
						String[] estado = in.readLine().split(": ");
						String[] nome = in.readLine().split(": ");
						String[] idade = in.readLine().split(": ");
						String[] sexo = in.readLine().split(": ");
						String[] partido = in.readLine().split(": ");
						String[] numero = in.readLine().split(": ");
						String[] projeto = in.readLine().split(": ");
						int id = Integer.parseInt(idade[1]);
						int n = Integer.parseInt(numero[1]);
						dep[i] = new Estadual(estado[1], nome[1],id, sexo[1], partido[1],n
								, projeto[1]);
						i++;
						
					
				}
			}
			
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public Deputado[] getDep() {
		return dep;
	}

	public void setDep(Deputado d) {
		for (int i = 0; i < dep.length; i++)
			dep[i] = d;
	}

}

Inclusive, no debug instanciou normalmente um Deputado Estadual, depois rodei no modo normal e deu erro.

Poneis123

Vai debugando até o erro acontecer, linha a linha. Não tem como o erro acontecer quando executa normal e não acontecer no debug…

Recomendo que deixe um break point na linha 41 da classe Candidatos.

Att,

caio.gaspar

acho que encontrei o erro…
quando voce le o arquivo .txt, você procura por Federal e começa a fazer o split…
mas voce esqueceu de considera tipo do candidato, dai quando chega na linha 40 do seu código ao invés de pegar a IDADE ele pega o nome…

tenta colocar antes do ESTADO(linha:38 ) o tipo.

como está no arquivo .txt

Tipo: Federal
Tempo de Política: 15
Nome: Pafúncio
Idade: 34
Sexo: M
Partido: PCR
Número: 1334
Projeto: Se eleito, prometo me eleger!



como está no seu código

if (tipo[tipo.length-1].equals("Federal")) {  
                           
                         String[] tempo = in.readLine().split(": ");  
                         String[] nome = in.readLine().split(": ");  
                         String[] idade = in.readLine().split(": ");  
                         String[] sexo = in.readLine().split(": ");  
                         String[] partido = in.readLine().split(": ");  
                         String[] numero = in.readLine().split(": ");  
                         String[] projeto = in.readLine().split(": ");  
                         int t = Integer.parseInt(tempo[1]);  
                         int id = Integer.parseInt(idade[1]);  
                         int n = Integer.parseInt(numero[1]);  
                        dep[i] = new Federal(t, nome[1],id, sexo[1], partido[1],  
                                 n, projeto[1]);  
                         i++;
F

@edit
Debugguei até a linha 40, e atribui a idade.

Não é necessário pedir novamente o tipo, tendo em vista que se não for Federal

if (tipo[tipo.length-1].equals("Federal")) //linha 22
Ele já cai no else como se fosse Estadual.

De fato a linha que está com erro é a linha:45

int id = Integer.parseInt(idade[1]);

No debug a idade está correta, aparece 23.
E também como podem ver o deputado instanciado também recebe todos os atributos corretamente.
Pode ver na imagem abaixo.

Por isto estou achando muito estranho. :-o


adriano_si

Cara… como está o teu arquivo ??? estás jogando cada campo dentro de um novo Array ???

Não seria cada linha dentro de um Array ???

manda teu Árquivo e teu Projeto…

Abs []

F

adriano_si:
Cara… como está o teu arquivo ??? estás jogando cada campo dentro de um novo Array ???

Não seria cada linha dentro de um Array ???

manda teu Árquivo e teu Projeto…

Abs []


O arquivo está na pasta do projeto, e está anexo no primeiro post.
Estou jogando cada linha do arquivo em um array para tal.

Segue o projeto em anexo.

[]s

caio.gaspar

Cara…
debugei o teu projeto
e o q está acontecendo é que está está levando em consideração os “—”(traços) no arquivo .txt
retira eles que vai funcionar…

Tipo: Estadual
Estado: RS
Nome: Gremista
Idade: 23
Sexo: M
Partido: PCO
Número: 1221
Projeto: Se eleito, prometo dar um jeito para que o inter não ganhe o mundial!

Tipo: Federal
Tempo de Política: 15
Nome: Pafúncio
Idade: 34
Sexo: M
Partido: PCR
Número: 1334
Projeto: Se eleito, prometo me eleger!


ou no lugar do

else

utiliza

else if(!tipo[0].equals("---"))
F

[quote=caio.gaspar]Cara…
debugei o teu projeto
e o q está acontecendo é que está está levando em consideração os “—”(traços) no arquivo .txt
retira eles que vai funcionar…

Tipo: Estadual
Estado: RS
Nome: Gremista
Idade: 23
Sexo: M
Partido: PCO
Número: 1221
Projeto: Se eleito, prometo dar um jeito para que o inter não ganhe o mundial!

Tipo: Federal
Tempo de Política: 15
Nome: Pafúncio
Idade: 34
Sexo: M
Partido: PCR
Número: 1334
Projeto: Se eleito, prometo me eleger!


ou no lugar do

else

utiliza

else if(!tipo[0].equals("---"))

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Exatamente, eu havia esquecido de tal detalhe…

Feito isto, ele deu array index out of bounds, dai coloquei +1 if pra incrementar o i somente enquanto ele for menos que quanti e funcionou legal

Obrigado por essa ajuda mesmo,cara.

De coração. :slight_smile:

caio.gaspar

capaz… de nada…

Criado 28 de abril de 2011
Ultima resposta 28 de abr. de 2011
Respostas 12
Participantes 6