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

[code]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;
}

}[/code]

Classe de teste:

[code]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());
			 
		 }[/code]

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? :smiley:

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

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

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…

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:

[code]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;
}

}[/code]

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

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,

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++;

@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


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 []

[quote=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 [][/quote]
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

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("---"))

[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:

capaz… de nada…