1

Buenas noches, estoy haciendo una tarea que pretende funcionar como menú del juego Tamagotchi, pero al querer pasar al case 2 o volver a hacer una operación la consola me manda java.lang.NullPointerException que no se a que ser refiere. Dejo dos imágenes del código que llevo hasta el momento.

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
angel_elias
  • 279
  • 2
  • 6
  • 14
  • 4
    pega tu codigo directamente, no añadas imagenes que dificultan la legibilidad y la posibilidad de que probemos tu aplicacion – Jordi Castilla Jun 06 '16 at 08:01
  • 1
    ¿Qué línea es la 76? – Vicky Vicent Jun 06 '16 at 08:22
  • java.lang.NullPointerException at principal.Principal.main (Principal.java:79). Es la nueva advertencia que tengo cuando ingreso al menu 1 y finaliza, en ella está ** } while (tecla.equals("N") || tecla.equals("n"));** – angel_elias Jun 06 '16 at 08:41
  • ¿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) – Ruslan López Feb 28 '21 at 22:17

3 Answers3

1

Si la línea 79 es esta: } while (letra.equals("N") || letra.equals("n"));

Seguramente letra está llegando null.

Por cierto, en el pantallazo has puesto letra pero en el código que nos has pegado pone tecla, a ver si vas a estar confundiendo el nombre de las variables y utilizando una referencia que es null.

Jose Serodio
  • 126
  • 4
  • Efectivamente, tengo dos letras de tipo String, de los cuales a uno de ellos he quitado el null y el otro solo le di un valor "null"; ahora me finaliza correctamente en el case 1. El problema sigue en el (case 2) que me manda el mismo error en las lineas donde comienza el (case 2) y el método que contiene. – angel_elias Jun 06 '16 at 09:16
0

El error

java.lang.NullPointerException

se refiere a que existe una variable objeto con valor nulo que tratas de usar.

Para evitar este problema debes asegurar que no tenga tu variable objeto un valor nulo, debes inicializarla.

El mensaje de la linea 79 es que la variable linea no este inicializada y es nula y tratas de ejecutar el método equals() sobre esta.

while (letra.equals("N") || letra.equals("n"));

te aconsejo también usar el método equalsIgnoreCase() para simplificar tu sentencia, de esta forma no tienes que validar la letra mayúscula y minúscula :

   while (letra.equalsIgnoreCase('n'));
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • Gracias por la respuesta, pero me parece que el arreglo que defino como [5] es la capacidad que posee. Intente cambiar el código según me dices y me manda el mismo tipo de error. Sobre la línea 79 lo reparé gracias. – angel_elias Jun 06 '16 at 09:26
  • entonces el error cambio de linea a la 79 y era que llamabas el método equals() de un valor nulo "linea". – Jorgesys Jun 06 '16 at 09:31
  • Si, lo llamaba con un valor nulo, se lo quité y me anduvo bien. El otro equals() del menú si tuve que inicializarlo como "null". Me funcionó también. – angel_elias Jun 06 '16 at 09:54
  • Regularmente se requiere inicializar pero en el flujo de tu código se le asigna un valor. – Jorgesys Jun 06 '16 at 16:27
0

Recibes un null, porque en el 'menú' dentro del do-while nunca pides letra. Cómo optimización, te aconsejo utilizar String#equalsIgnoreCase(String) en vez de comprobar 2 veces con los equals si es la respuesta en minúsculas o mayúsculas.

Cambio del do-while y pedir datos por teclado.

final Scanner in = new Scanner(System.in);
String letra = "N";
do {
    // Creas objeto Pokémon
    // Le estableces valores
    // Muestras datos
    // Preguntas si quiere continuar (S/s o N/n)
    letra = teclado.nextLine();
} while (letra.equalsIgnoreCase('S'));
dddenis
  • 3,923
  • 4
  • 24
  • 47