0

estoy tratando de imprimir una matriz, el código funciona así. Son 3 idiomas, se elige el idioma y entra a opciones, la primera es capturar datos, pide nombre, edad, sexo, estatura y correo, lleno los datos sin problema. La segunda opción es para mostrar los datos, entra a un submenu, imprime todos, por edad y por sexo. Cuando imprimo todos no hay problema, el detalle es en edad y sexo, me marca el error Exception in thread "main" java.lang.NullPointerException

Anexo código:

import java.util.*;//import para poder usar scanner

public class MatrizIdiomas {

    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in); //Se crea para leer datos por el usuario
        String registros[][]=new String[10][5];//declaración de la matriz que va a contener 10 filas y 5 columnas
        int opc;//entero para almacenar la opcion del menu
        String ed="";//usado para buscar la edad
        String bien="", menuopc="",menu3="";//cadenas con los mensajes en distintos idiomas
        String nom="",sex="",edad="",est="",email="",msjsalida=""; //mensajes en distintos idiomas
        
        System.out.print("Selecciona el idioma\n1.Español\n2.Ingles\n3.Frances\n");//Mensaje para seleccionar el idioma
        opc=sc.nextInt();//lectura de opcion de idioma
        
        if(opc==1){//condicional if para obtener los mensajes en español
           bien="Bienvenido a bordo";//mensaje bienvenida
           menuopc="-----MENU-----\n1.Capturar información\n2.Mostrar información\n0.SALIR\n";//mensaje de menu de opcines en español
           menu3="Elige una opcion:\n1.Todos\n2.Edad\n3.Sexo\n";
           nom="Ingresa el nombre: ";
           sex="Ingresa el sexo M de masculino y F de femenino: ";
           edad="Ingresa tu edad: ";
           est="Ingresa la estatura en centimetros: ";
           email="Ingresa el correo electronico: ";
           msjsalida="Ingresa $ en el nombre para salir";
        }
        
        if(opc==2){//seleccion para mensajes en ingles
            bien="Welcome to aboard";//mensaje de bienvenida en igles
            menuopc="----- MENU -----\n1.Capture information\n2.View information\n0.EXIT\n";//mensaje de menu de opcines en ingles
            nom="Enter name: ";
            sex="Enter the gender M for male and F for female: "; //mensajes en ingles
            edad="Enter your age: ";
            est="Enter the height in centimeters: ";
            email="Enter email: ";
            msjsalida="Enter $ in the name to exit";
            menu3="Choose an option:\n1.All\n2.Age\n3.Sex";
        }
        if(opc==3){
            bien="Bienvenue à bord";//bienvenida en ingles
            menuopc="----- MENU -----\n1.Capturer les informations\n2.Afficher les informations\n0.EXIT\nn";//menu en frances
            nom="Saisissez le nom : ";
            sex="Entrez le genre M pour homme et F pour femme: "; //mensajes en frances
            edad="Entrez votre âge: ";
            est="Entrez la hauteur en centimètres: ";
            email="Entrez l'e-mail : ";
            msjsalida="Entrez '$' dans le nom pour quitter";
            menu3="Choisissez une option:\n1.Tous\n2.Âge\n3.Sexe";
        }

        System.out.print(""+bien);//mensaje de bienvenida
        opc=10;//se le pone otro valor ya que se volvera a usar
        do{
            System.out.print(""+menuopc);//Se imprime el segundo menu
            opc=sc.nextInt();//valor elegido
            sc.nextLine();
            switch(opc){//Seleccion de opciones
                case 1: //entra a capturar informacion
                    System.out.print(msjsalida+"\n");
                    for(int i=0;i<10;i++){
                        System.out.print(nom);
                        registros[i][0]=sc.nextLine();
                        
                        if(registros[i][0].equals("$")){
                            i=100;
                        }
                        else{
                            System.out.print(sex);
                            registros[i][1]=sc.nextLine();
                            System.out.print(edad);
                            registros[i][2]=sc.nextLine();
                            System.out.print(est);
                            registros[i][3]=sc.nextLine();
                            System.out.print(email);
                            registros[i][4]=sc.nextLine();
                        }
                    }    
                break;
                
                case 2:
                    System.out.print(menu3);
                    opc=sc.nextInt();
                    switch(opc){
                        case 1:
                            for(int i=0;i<10;i++){
                                if(registros[i][0].equals("$")){
                                    i=100;
                                }
                                else{    
                                    System.out.print(registros[i][0]+"   "+registros[i][1]+"  "+registros[i][2]+"  "+registros[i][3]+"  "+registros[i][4]+"\n");
                                }
                            }
                        break;
                        
                        case 2:
                            System.out.print(edad);
                            ed=sc.nextLine();
                            sc.nextLine();
                            for(int i=0;i<10;i++){
                                if(registros[i][2].equalsIgnoreCase(ed)){
                                    System.out.print(registros[i][0]+"   "+registros[i][1]+"  "+registros[i][2]+"  "+registros[i][3]+"  "+registros[i][4]+"\n");     
                                }     
                            }
                        break;    
                            
                        case 3:
                            System.out.print(sex);
                            ed=sc.nextLine();
                            sc.nextLine();
                            for(int i=0;i<registros.length;i++){
                                while(registros[i][1].equalsIgnoreCase(ed)){
                                    System.out.print(registros[i][0]+"   "+registros[i][1]+"  "+registros[i][2]+"  "+registros[i][3]+"  "+registros[i][4]+"\n");            
                                }
                            }
                        break;
                    }
                break;          
            }
        }while(opc!=0);
    }
}

Benito-B
  • 3,831
  • 3
  • 11
  • 28
  • Todos los NullPointerException (NPE) son por lo mismo... estás intentando usar algún objeto que en realidad es un `null`, y `null` no tiene el método o valor que tú quieres usar. Te recomiendo que revises bien el código y no intentes acceder a algo que no está instanciado. Por ejemplo, es muy fácil obtener un NPE haciendo esto: `registros[i][1].equalsIgnoreCase(ed)` en un loop. Si `registros[i][1]` todavía no tiene valor, te dará un NPE porque null no tiene equalsIgnoreCase! Has las comparaciones al revés: `ed.equalsIgnoreCase(registros[i][1])` nunca fallará si `ed` está definido (y debería) – Benito-B Oct 02 '21 at 07:59
  • Ya lo hice como me comentaste, ya no me marca el error, el único detalle es que no imprime los valores de la matriz – Elbor Racho Oct 02 '21 at 20:10

0 Answers0