Java - ¿Alguien sabe por qué me devuelve un error de NumberFormatException?

   
Vista:

¿Alguien sabe por qué me devuelve un error de NumberFormatException?

Publicado por Paco01 (32 intervenciones) el 24/11/2017 19:28:39
Hola. os explico lo que hace esta función. Básicamente busca objetos en un fichero con el siguiente formato: Id;nombre;año y los muestra en un ListView. Cada linea del fichero es un coche, pero al llegar al último objeto del fichero me da un error de NumberFormatException. Obviamente he comprobado que esté bien escrito en el fichero, y lo está, pero siempre, al llegar al último coche del fichero, me da el error, da igual la cantidad de coches que haya en el fichero, siempre es en el último. Este es el método:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public void CargarFicheroEnLista() {
        Coche c = new Coche();
        // Lista de coches
        data = FXCollections.observableArrayList();
        // Creamos los objetos File y BufferedReader para leer el fichero
        File f;
        BufferedReader br = null;
        // En cadena se almacenarán las lineas del fichero, una por una
        String cadena;
        // Creamos las variables con las que se crearán el objeto que será guardado en la colección
        int ID;
        String nombre;
        int año;
        // Se usará un split sobre el array para separar cada elemento 
        String[] partes;
try{
            // A File le pasamos fichero donde se almacenan los datos de los coches.
            f = new File("Coches.txt");
            br = new BufferedReader(new FileReader(f));
 
            // Mientras cadena no devuelva null, estará leyendo lineas en el fichero
            while((cadena = br.readLine()) != null){
                partes = cadena.split(";");
 
                // Cada variable tomará su valor correcto, y se realizarán los castings necesarios.
                ID = Integer.parseInt(partes[0]);
                nombre = partes[1];
                año = Integer.parseInt(partes[2]);
 
                // Se crea un objeto con los parámetros del fichero de texto y se añade a la colección.
                c = new Coche(ID, nombre, año);
                data.add(c);
            }
            lv.setItems(data);
        // Control de excepciones.
        } catch(FileNotFoundException e){
            JOptionPane.showMessageDialog(null, "No se encuentra el fichero");
        } catch(IOException e){
            JOptionPane.showMessageDialog(null, "Error de entrada/salida");
        }
}

Gracias. lo que hay escrito en el fichero es:

1;Seat Leon;1999
2;Seat Toledo;1991
3;Seat Cordoba;1993
4;Seat Panda;1980
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

¿Alguien sabe por qué me devuelve un error de NumberFormatException?

Publicado por sandro (3 intervenciones) el 27/11/2017 21:51:08
en la operacion no es un numero lo que quieres aperar

checa esta rutina

buscando en internet hice esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public	static	boolean isNumeric		(	String
									cadena	)
						throws AWTException			{
		try									{
			publicaErrores
				.main			(	"cadena"	,
								cadena		)	;
			for(	int		i	=	0		;
						i	<	cadena.length	();
						i	++			)
				if(	cadena.codePointAt
							(		i	)
							<	48		||
					cadena.codePointAt
							(		i	)
							>	57		)
					return		false				;
			if(	cadena.matches		(	"[0-9]"	))
				return		true					;
		}catch (Exception e						)	{
			e.printStackTrace(					)	;
			System.exit(0)							;
		}
		return		true							;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien sabe por qué me devuelve un error de NumberFormatException?

Publicado por Juan Francisco (53 intervenciones) el 28/11/2017 19:31:01
Puede ser que al final de fichero te guarde algun caracter o espacio o salto de linea o algo asi...para comprobar eso en el split, el array
partes mira haber la longitud que tiene en cada vuelta ...

Por ejemplo ;

dentro del while haz partes[2].lenght , deberia dar un tamaño de 4 , al ser 1 9 8 0 , el ultimo si el ultimo te da mas tamaño es que hay algo hay que se añade alfinal, si es asi intenta eliminarlo con un trim(), sino lo eliminas con un trim()..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar