Foro sobre Java SE > NullPointerException con readLine()
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
<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>
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.
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
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.