0

Estoy tratando de hacer un registro de alumnos en java, pero cada vez que ingreso la opcion de buscar alumnos, me lanza el nullpointer exception,me pueden decir porque?

estas son las lines de codigo en las que me dice que debo revisar

public void Mostrar(){
        for(int a=0;a<31;a++){
            System.out.println("Nombre:"+alumnos[a].getNombre()+" "+alumnos[a].getApellido());
        }
    }
usuario
  • 13
  • 4
  • 2
    ¿Responde esto a tu pregunta? [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – Alfabravo Jul 30 '20 at 17:54
  • Siempre existen 30 alumnos? Si existe 1 el ciclo for sigue y ahí empiezan los problemas. – Bicho Jul 30 '20 at 17:55
  • En el código que muestras no se ve dónde se crea el array alumnos ni sabemos si tiene 30 elementos – Alfabravo Jul 30 '20 at 17:55
  • es que deben haber 5 alumnos pre registrados y tener capacidad para regristrar 25 alumnos mas por eso puse 30 – usuario Jul 30 '20 at 18:02
  • SI no editas tu pregunta y añades todo el código relevante, nadie te va a poder ayudar. Usa el enlace 'editar' que está justo debajo de la pregunta. – Alfabravo Jul 30 '20 at 18:13

2 Answers2

0

Aca va un ejemplo completo.

Primero crear archivo clase Alumnos.java

public class Alumnos {

    private String nombre;
    private String apellido;

    public Alumnos(String nombre, String apellido) {
        this.nombre = nombre;
        this.apellido = apellido;

    }

    public String getNombre() {
        return this.nombre;
    }

    public String getApellido() {
        return this.apellido;
    }
}

Test del código en Test.java

public class Test {

    public static void main(String[] args) {
        //En este ejemplo defino un array de 10.
        Alumnos[] alumnos = new Alumnos[10];
        //Asigno en este ejemplo solo 3 objeto inizializados.
        alumnos[0] = new Alumnos("Nombre1", "Apellido1");
        alumnos[1] = new Alumnos("Nombre2", "Apellido2");
        alumnos[2] = new Alumnos("Nombre3", "Apellido3");

        Alumnos alumno;
        for (int i = 0; i < alumnos.length; i++) {
            alumno = alumnos[i];
            if (alumno != null) {
                System.out.println(alumno.getNombre() + " - " + alumno.getApellido());
            } else {
                System.out.println("No hay datos definos en la posicion: " + i);
            }
        }
    }
}

Este ejemplo me devuelve lo siguiente:

Nombre1 - Apellido1
Nombre2 - Apellido2
Nombre3 - Apellido3
No hay datos definos en la posicion: 3
No hay datos definos en la posicion: 4
No hay datos definos en la posicion: 5
No hay datos definos en la posicion: 6
No hay datos definos en la posicion: 7
No hay datos definos en la posicion: 8
No hay datos definos en la posicion: 9
toto
  • 619
  • 3
  • 5
0

Básicamente, siempre que vos sepas que puede venir un objeto, ya sea en un array o un objeto devuelto por un metodo, tenes que validar que lo que devuelve no sea un null. Recorda que asi como como int por defecto se inicializa en 0, los objetos se inicializan en null, por lo tanto cada vez que tengas que pedir un dato a un objeto verifica que sea distinto de null de la siguiente forma:

if (alumno != null)

segundo punto, siempre que recorras un array o lista, es recomendable que utilices el .length, el cual devuelve el tamaño del array. De esta forma evitas la excepción array index out of bounds exception.

for(int i = 0; i < array.length; i++)
{
     //bloque de codigo
}
Franco Torres
  • 562
  • 2
  • 12