[ Foro de Java ]
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.)