0

Buenas estoy haciendo un programa donde debo (ingresar el nombre y la nota de unos alumnos) hacer 2 arrays uno de tipo String y otro de tipo float .Tengo problema en el main cuando quiero ingresar por consola los datos del alumno . Primero puse el Scanner luego declare dos arrays del tipo String y float , pero me dicen que debo inicializarlo y eclipse me pone que debo ponerles igual a null , pero me sale una advertencia en esta parte :

nombre[i] = teclado.next();
nota [i]= teclado.nextFloat();

que me dice que no les puedo poner null y cuando lo hago e ingreso el primer dato me sale :

Exception in thread "main" java.lang.NullPointerException at arrays_alumnos.PruebaAlumno.main(PruebaAlumno.java:20)

No se si el problema esta cuando le pongo a los arrays teclado.next();/teclado.nextFloat(); o por que no inicialice las variables y al hacerlo les pongo null y esta mal.

public class Alumnos {

private String nombreAlumno[] ;
private float nota[];

public Alumnos() {

    this.nombreAlumno = new String [5] ;
    this.nota = new float [5];
}

public Alumnos(String nombre[] , float[] nota) {
    this.nombreAlumno = nombre ;
    this.nota= nota;

}

public String[] getNombre() {

    return this.nombreAlumno;
}

public void setNombre(String [] nombreAlumno ) {

    this.nombreAlumno = nombreAlumno;
}

public float [] getNota() {

    return this.nota;
}

public void setNota(float [] nota) {

    this.nota = nota ;
}

public void verificacionDeNota() {

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

        if(nota[i]>=7.0) {

        System.out.println("Alumno : " +nombreAlumno + " Promocionado.");

    }

    if (nota[i] >=1.0 && nota[i] <=3.0) {

        System.out.println("Alumno : " +nombreAlumno +" Reprobado.");

    }

    if(nota[i]>=4 && nota[i]<=6) {

        System.out.println("Alumno : " +nombreAlumno +" Aprobado.");
    }

    }


}

}

import java.util.Scanner;

public class PruebaAlumno {

public static void main(String[] args) {

    Scanner teclado = new Scanner (System.in);

    String nombre[] = null ;
    float nota[]  = null;



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

        System.out.println((i+1)+".Ingrese nombre : ");
        nombre[i] = teclado.next();
        System.out.println((i+1)+".Ingrese nota : ");
        nota [i]= teclado.nextFloat();

        Alumnos curso1 = new Alumnos (nombre , nota);


    }



}

}

computer
  • 763
  • 1
  • 15
  • 37
  • en effecto el problema es que estas intentando ingresar un valor a un array null. por ejemplo tienes un for que interactua 5 veses. pero en relacion a que? si el array es nulo? hacer referencia a `nombre` en la posicion `i` pero `nombre` es null [¿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) por tanto debes inicializar primero el array por ejemplo `String nombre[] = new String[5]` ESTO EN MAIN! – Sith Nazgûl Cat Dec 08 '18 at 03:21

1 Answers1

1

En tu clase, sus atributos los estas tratando como arreglos, eso quiere decir que tendrás un arreglo de float y un arreglo de String para cada instancia de tu objeto. Te recomiendo que solo los trates como float y String

public class Alumno {
    private String nombreAlumno[] ;
    private float nota[];
    .... //metodos

}

tu código te quedaría así para los atributos.

public class Alumno {
    private String nombreAlumno;
    private float nota;
    .... //metodos

}

tu constructor, también tiene el mismo problema, debería quedarte así para que no tengas algún error, con respecto a tu otro constructor creo que esta demás.

public Alumno(String nombreAlumno , float nota) {

   this.nombreAlumno = nombreAlumno ;
   this.nota = nota;
}

la declaracion de tus metodos, tambien cambialo, para que te queden asi.

public String getNombre(){...}
public void setNombre(String nombreAlumno ) {...}
public float getNota() {...}
public void setNota(float nota) {...}

Ahora tu main, de igual manare al momento de capturar datos, lo estas tratando a la variable nombre y nota como arreglos. Lo mejor seria que solo lo pongas normal. Que te quede de la siguiente forma

public static void main(String[] args) {

    Scanner teclado = new Scanner (System.in);

    String nombre = null ;
    float nota  = null;

    System.out.println((i+1)+".Ingrese nombre : ");
    nombre = teclado.next();
    System.out.println((i+1)+".Ingrese nota : ");
    nota = teclado.nextFloat();

    Alumno alumno1 = new Alumnos (nombre , nota);

}

ahora si quizas quieres almacenar los datos de un AULA, te recomendaria crees otra clase que almacene varios ALUMNOS

public class Aula{
    private String nombreAula;
    private HashSet <Alumnos> listaAlumnos = new HashSet<Alumnos>();

    public Aula(String nombreAula){
        this.nombreAula = nombreAula;
    }

   public void agregarAlumno(Alumnos al){
       listaAlumnos.add(al);
    }
}

en la cual la funcion agregarAlumno(Alumnos al) te permitira agregar alumnos cada vez que quieras.

public static void main(String[] args) {

    Scanner teclado = new Scanner (System.in);

    String nombre = null ;
    float nota  = null;
    Aula mate = new Aula("MATEMATICAS");


    System.out.println(".Ingrese nombre : ");
    nombre = teclado.next();
    System.out.println(".Ingrese nota : ");
    nota = teclado.nextFloat();

    Alumno alumno1 = new Alumnos (nombre , nota);
    mate.agregarAlumno(alumno1);
 }

si deseas lo pones entre un for y pides como cuantos alumnos vas a ingresar.

Nick JAG
  • 15
  • 1
  • 4