¿Por qué recibo NullPointerException con arrays?

publicado por: Anonymous

Tengo este código pero me salta un NullPointerException y no sé cuál puede ser el fallo:

import java.util.Scanner;
public class Main {
    public static Scanner sc=new Scanner(System.in);
    public static String[] mensaje;
    public static String men;

    public static void main(String[] args){
        System.out.println("Eliga una opcion [1-3]");
        System.out.println("Codificar mensaje");
        System.out.println("Decodificar mensaje");
        System.out.println("Salir");
        int opcion = sc.nextInt();
        if(opcion == 1){
            sc.nextLine(); //Limpio el buffer de entrada
            codificar();
        }else if(opcion == 2){
            sc.nextLine(); //Limpio el buffer de entrada
            decodificar();
        }else if(opcion == 3){
            System.exit(0);
        }


    }
    public static void codificar(){
        System.out.println("Introduzca el mesaje a codificar sin signos de puntuacion");
        int n = 0;
        while(n>-1){
            men = sc.nextLine().toString(); //Guardo cada palabra del String en la variable en y si quito .toString() el problema sigue
            try{
                mensaje[n] = men; //Asigno cada palabra a un valor del array
            }catch(Exception e){
                e.printStackTrace();
                //Aqui me salta NullPointerException
            }
            System.out.println(mensaje[n]);
                //Y aquí también me salta
            n++;
        }

    }
    public static void decodificar(){

    }
}

solución

Como bien dice Simon, sale un ´NullPointerException´ cuando intentas usar un objeto, en tu caso mensaje(de tipo Array), sin antes haberlo inicializado. Para usar variables podes verlo como 2 pasos:

  1. Declararla: Siendo en este paso cuando tu programa reserva un espacio en la memoria ram, para luego poder almacenar datos en ella(teniendo en cuenta el tipo de variable que hayas declarado). Ej: int a;, bool b;, Object c;
  2. Inicializarla: Ya con el lugar reservado, podes guardar tus datos en tal lugar, para luego usarlos. Ej:a = 2;,b = true, c = new String[10]

En tu caso quieres usar un array de String, por lo tanto y con cualquier variable, luego de declarar tu variable, tenes que inicializarla.

String mensaje[]; //Declaro 

mensaje = new String[10];//Inicializo

public static String[] mensaje = new String[10];//Todo en una línea.
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *