Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > NullPointerException con readLine()

Buenas a todos. Estoy empezando poco a poco y me gustaría empezar a jugar con los arrays. No sé si será el problema con los arrays o con la entrada de datos, pero en este programita tan sencillo me salta NullPointerException:

Teniendo una clase externa pilotos, este es la clase main:

import java.io.*;

public class Main {

public static void main(String[] args) throws IOException{

// Iniciación de pilotos
Piloto[] pilotos = new Piloto[2];

// Flujo de datos de entrada
InputStreamReader isr = new InputStreamReader(System.in);

// Filtro para optimizar la lectura de datos
BufferedReader br = new BufferedReader(isr);

for(int i=0; i<3; i++){

System.out.println("Introduzca el nombre del piloto nº "+i);
String texto = br.readLine();
pilotos[i].nombre.equals(texto);

}

}

}

La excepción salta al introducir el nombre del primer piloto. ¿Qué puedo estar haciendo mal? Muchas gracias de antemano.

noviembre 8, 2011 | Registered Commentersalami

Creo que te resultaría más práctico usar la clase Scanner, y su método next() para leer desde el teclado.
Además de eso, tienes un error en el código, que te ocasionará un ArrayOutOfBounds Exception:
- declaras un array de Piloto de tamaño 2
- usas un bucle para tres elementos
Recuerda que los arrays en Java comienzan siempre en 0

noviembre 8, 2011 | Unregistered Commenterchoces

<p>Saludos, lo que esta pasando es que estas intentando comparar un atributo de un objeto que no ha sido inicializado en la sentencia pilotos[i].nombre.equals(texto);</p>

<p>Debes despues de asignar el tamaño a tu arreglo inicializar cada uno de los objetos que vas a usar de la siguiente manera: Piloto[i] = new Piloto(); y adicional, debes revizar que en el constructor de la clase el atributo nombre sea inicializado con algun valor para que asi lo puedas comparar</p>

noviembre 8, 2011 | Unregistered Commentercpatino

Hola, como estas?

Mira por lo que veo, el problema lo tenes aca:

Piloto[] pilotos = new Piloto[2];

y aca:

for(int i=0; i<3; i++){


Acordate que si declaras un array de 2 elementos... estos van a estar en las posiciones 0 y 1 del array. Las posciones siempre son 1 - el tamaño del array.

Como haces que ese for vaya de 0 a 3... en la ultima iteraccion te va a saltar un nullpointerexception...

Yo lo acomodaria de la siguiente forma:

for(int i=0; i<pilotos.length; i++){

Asi te aseguras que i siempre sea menor al tamaño del array.

Espero que te sirva.

noviembre 9, 2011 | Registered Commenterleojg

Muchas gracias a todos!

Entre unas ideas y otras, he dejado el código así:

public class Main {

public static void main(String[] args) throws IOException{

// Iniciación de pilotos
/*Piloto numero1 = new Piloto();
Piloto numero2 = new Piloto();
Piloto numero3 = new Piloto();*/

Piloto[] piloto = new Piloto[3];

for(int i=0; i<piloto.length; i++){

piloto[i] = new Piloto();
}

// Flujo de datos de entrada
InputStreamReader isr = new InputStreamReader(System.in);
// Filtro para optimizar la lectura de datos
BufferedReader br = new BufferedReader(isr);

for(int i=0; i<piloto.length; i++){

System.out.println("Introduzca el nombre del piloto nº "+i);
String texto = br.readLine();
piloto[i].nombre ="";
piloto[i].setNombre(texto);

}





}


Haciendo un println de la variable con su método getNombre() se imprime correctamente, así que parece solucionado.

Una duda que me surge, tengo entendido que estos métodos get y set se usan en Beans. No tengo muy claro cuando se usan estos beans exactamente. No veo la diferencia con una clase normal, excepto por estos get y set. ¿Alguien puede aclararme algo?

Gracias de antemano

noviembre 11, 2011 | Unregistered CommenterSalami