[ Foro de Java ]

porque me aparece este error?

04-Dec-2021 23:28
Invitado (Danni)
0 Respuestas

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "proyecto.Locker.costoLocker()" because the return value of "proyecto.Gimnasio.obtenerLocker(int)" is null
at proyecto.Menu.registrarRentaLocker(Menu.java:138)
at proyecto.Menu.desplegarMenu(Menu.java:41)
at proyecto.Principal.main(Principal.java:10)

en el metodo obtenerLocker lo que debe hacer es:  Permite obtener el locker asignado a una posición determinada, deberá validar que el número sea una posición válida. Regresa null si el locker no está ocupado.
no se si puedan resolver el error o una mejor forma de tener el metodo obtenerLocker

public void registrarRentaLocker() {
       Scanner tec = new Scanner(System.in);
       System.out.println(" ***Registro de renta ");
       char opcion = 'S';

       while (opcion == 'S' || opcion == 's') {

       int posicion = 1;
     
           if (posicion == -1) {
               break;
           }
 
           if (posicion >= 0 && posicion < 30) {

               if (gimnasio.obtenerLocker(posicion) != null) {
                   System.out.println("*** *** Número Del locker Disponible");
                   System.out.println("Presione Enter Para Continuar");
                   tec.nextLine();
                   tec.nextLine();
                   System.out.println("Desea Continuar Con El Registro De Renta? (S/N)");
                   opcion = tec.next().charAt(0);
                   while (opcion != 'S' && opcion != 'N' && opcion != 's' && opcion != 'n') {
                       System.out.println("*** Error: Respuesta Inválida.");
                       System.out.println("Presione Enter Para Continuar");
                       tec.nextLine();
                       tec.nextLine();
                       System.out.println("Desea Continuar Con El Registro DE Renta? (S/N)");
                       opcion = tec.next().charAt(0);
                   }
                   if (opcion == 'S' || opcion == 's') {
                   } else if (opcion == 'N' || opcion == 'n') {
                       break;
                   }
               }

               if (opcion == 'S' || opcion == 's') {
                   System.out.println("Ingrese El Nombre Del cliente: ");
                   String nombreCliente = tec.next();

                   System.out.println("Ingrese El tamaño del locker: ");
                   String tamanio = tec.next();

                   System.out.println("periodo de renta: ");
                   String tipoContratacion = tec.next();

                   float costo=0f;

                   
                   gimnasio.getSiguienteDisponible();
                   System.out.println(" **********Confirmacion ");
                   System.out.println("Cliente: " + nombreCliente);
                   System.out.println("Tamaño: " + tamanio);
                   System.out.println("Contratacion: " + tipoContratacion);
                   System.out.println("Costo: " + gimnasio.obtenerLocker(posicion).costoLocker());
                   System.out.println("Locker asignado: " + gimnasio.getSiguienteDisponible());
                   System.out.println("");


                   System.out.println("confirmar el registro? (S/N): ");
                   char confirmar = tec.next().charAt(0);
                   while (confirmar != 'S' && confirmar != 'N' && confirmar != 's' && confirmar != 'n') {
                       System.out.println("*** Error: Respuesta inválida.");
                       System.out.println("Presione Enter Para Continuar");
                       tec.nextLine();
                       tec.nextLine();
                       System.out.println("Desea Confirmar El Registro De Reservaciones (S/N).");
                       confirmar = tec.next().charAt(0);
                   }


                   if (confirmar == 'S' || confirmar == 's') {
   
                       Locker locker = new Locker(nombreCliente, tamanio, tipoContratacion);
                       gimnasio.setLocker(locker);
                       System.out.println("Reservacion Realizada.");

                 
                       System.out.println("Desea Continuar Con El Registro De Reservaciones, (S/N).");
                       opcion = tec.next().charAt(0);
                       while (opcion != 'S' && opcion != 'N' && opcion != 's' && opcion != 'n') {
                           System.out.println("*** Error: Respuesta Inválida.");
                           System.out.println("Presione Enter Para Continuar");
                           tec.nextLine();
                           tec.nextLine();
                           System.out.println("Desea Continuar Con El Registro De Reservaciones, (S/N).");
                           opcion = tec.next().charAt(0);
                       }
                       if (opcion == 'S' || opcion == 's') {
                       } else if (opcion == 'N' || opcion == 'n') {
                           break;
                       }
                   } else if (confirmar == 'N' || confirmar == 'n') {
                       System.out.println("Reservacion No Realizada.");

                       System.out.println("Desea Continuar Con El Registro De Reservaciones, (S/N).");
                       opcion = tec.next().charAt(0);
                       while (opcion != 'S' && opcion != 'N' && opcion != 's' && opcion != 'n') {
                           System.out.println("*** Error: Respuesta Inválida.");
                           System.out.println("Presione Enter Para Continuar");
                           tec.nextLine();
                           tec.nextLine();
                           System.out.println("Desea Continuar Con El Registro De Reservaciones, (S/N).");
                           opcion = tec.next().charAt(0);
                       }
                       if (opcion == 'S' || opcion == 's') {
                       } else if (opcion == 'N' || opcion == 'n') {
                           break;
                       }
                   }
               }
           }

       }

   }


package proyecto;

public class Gimnasio {
   private String nombreGimnasio;
   private Locker lockers[];
   private Locker locker;
   
   public Gimnasio(String nombreGimnasio){
       this.nombreGimnasio=nombreGimnasio;
       lockers = new Locker[30];
     

       
   }
   
   public Locker obtenerLocker(int posicion) {
       if (posicion>1 &&posicion<=lockers.length){
           if (lockers[posicion-1]!=null){
               return lockers[posicion-1];
           }else{
               return null;
           }
       }
       else{
               return null;
       }
   }



public float costoLocker(){
       float costo=0f;
       if (tipoContratacion.equalsIgnoreCase("Trimestre") || tipoContratacion.equalsIgnoreCase("trimestre") || tipoContratacion.equalsIgnoreCase("Tri")) {
           if (tamanio.equalsIgnoreCase("Chico") || tamanio.equalsIgnoreCase("chico")) {
               costo = 120f;
           } else if (tamanio.equalsIgnoreCase("Mediano") || tamanio.equalsIgnoreCase("mediano")) {
               costo = 160f;
           } else if (tamanio.equalsIgnoreCase("Grande") || tamanio.equalsIgnoreCase("grande")) {
               costo = 195f;
           }
       }else if (tipoContratacion.equalsIgnoreCase("Mensual") || tipoContratacion.equalsIgnoreCase("Men") || tipoContratacion.equalsIgnoreCase("mensual") ){
           if (tamanio.equalsIgnoreCase("Chico")|| tamanio.equalsIgnoreCase("chico")) {
               costo = 50f;
           } else if (tamanio.equalsIgnoreCase("Mediano") || tamanio.equalsIgnoreCase("mediano")) {
               costo = 60f;
           } else if (tamanio.equalsIgnoreCase("Grande") || tamanio.equalsIgnoreCase("grande")) {
               costo = 75f;
           }
       }else{
           costo=0f;
       }
       
       return costo;
   }

también planee utilizar este método para hace menos código pero me sale el mismo error
public void imprimirDatos(int posicion) {
       String nombreCliente = lockers[posicion].getNombre();
       String tamanio = lockers[posicion].getTamanio();
       String tipoContratacion = lockers[posicion].getTipoContratacion();
       Locker locker = new Locker(nombreCliente, tamanio, tipoContratacion);
       System.out.println(" **********Confirmacion ");
       System.out.println("Cliente: " + nombreCliente);
       System.out.println("Tamaño: " + tamanio);
       System.out.println("Contratacion: " + tipoContratacion);
       System.out.println("Costo: " + locker.costoLocker());
       System.out.println("Locker asignado: " + (posicion + 1));
       System.out.println("");
   }




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)