Sort array defined with sort (); in java

0

My problem arises when I order my array String nombre[5] (Whenever I consult when I have less than 5 names), because when I want to consult data I get an error:

package mainclass;
import java.util.Scanner;
import java.util.Arrays;



/**
 *
 * @author Pedro 
 */
public class Personas {
   public static Scanner leer=new Scanner(System.in);
   public static String nombre[]=new String[5];
   public static int edad[]=new int[5];
   public static double altura[]=new double[5]; 
   public static double peso[]=new double[5];
   public static String sexo[]=new String[5];
   public static int Contador;
   public static String ComparaNom;


   //Constructores y destructores
    public static Scanner getLeer() {
        return leer;
    }

    public static void setLeer(Scanner leer) {
        Personas.leer = leer;
    }

    public static String[] getNombre() {
        return nombre;
    }

    public static void setNombre(String[] nombre) {
        Personas.nombre = nombre;
    }

    public static int[] getEdad() {
        return edad;
    }

    public static void setEdad(int[] edad) {
        Personas.edad = edad;
    }

    public static double[] getAltura() {
        return altura;
    }

    public static void setAltura(double[] altura) {
        Personas.altura = altura;
    }

    public static double[] getPeso() {
        return peso;
    }

    public static void setPeso(double[] peso) {
        Personas.peso = peso;
    }

    public static String[] getSexo() {
        return sexo;
    }

    public static void setSexo(String[] sexo) {
        Personas.sexo = sexo;
    }




//Metodos

   public static void registrar(){
      int existe;//Variable para comparar si existe el usuario
       if(Contador<5)//Verifica si el arreglo esta lleno (MAX 5)
       {

       System.out.println("Nombre: ");
       nombre[Contador]=leer.next();
       System.out.println("Edad: ");
       edad[Contador]=leer.nextInt();
       System.out.println("Altura: ");
       altura[Contador]=leer.nextDouble();
       System.out.println("Peso: ");
       peso[Contador]=leer.nextDouble();
       System.out.println("Sexo: ");
       sexo[Contador]=leer.next();

       Contador++;

       }


       else
       {
           System.out.println("No hay mas espacio...");
       }
   }
   public static void borrar(){
       System.out.println("Borrar: "); ComparaNom=leer.next();
       for(int i=0;i<Contador;i++){
           if(ComparaNom.equals(nombre[i])){
               for(int z=i;z<Contador;z++){
                   nombre[z]=nombre[z+1];
                   edad[z]=edad[z+1];
                   altura[z]=altura[z+1];
                   peso[z]=peso[z+1];
               }
           }
       }Contador--;
   }
   public static void modificar(){
       System.out.println("Modificar: "); ComparaNom=leer.nextLine();
       for(int i=0; i<Contador;i++){
           if(ComparaNom.equals(nombre[i])){
               System.out.println("Nombre: ");
               nombre[i]=leer.next();
               System.out.println("Edad: ");
               edad[i]=leer.nextInt();
               System.out.println("Altura: ");
               altura[i]=leer.nextDouble();
               System.out.println("Peso: ");
               peso[Contador]=leer.nextDouble();
               System.out.println("Sexo: ");
               sexo[Contador]=leer.next();
           }
       }
   }
   public static void busqueda(){
       System.out.println("Buscar: "); ComparaNom=leer.next();
       for(int i=0;i<Contador;i++){
           if(nombre[i].equals(ComparaNom)){
               System.out.println("Nombre: "+nombre[i]);
               System.out.println("Edad: "+edad[i]);
               System.out.println("Altura: "+altura[i]);
               System.out.println("Peso: "+peso[i]);
               System.out.println("Sexo: "+sexo[i]);
           }
       }
   }
   public static void general(){
       Arrays.sort(nombre);
       for(int i=0;i<Contador;i++){
           System.out.println("");
           System.out.println("Nombre: "+nombre[i]);
           System.out.println("Edad: "+edad[i]);
           System.out.println("Altura: "+altura[i]);
           System.out.println("Peso: "+peso[i]);
           System.out.println("Sexo: "+sexo[i]);
       }
   }


}

The error:

  

Exception in thread "main" java.lang.NullPointerException at   java.util.ComparableTimSort.countRunAndMakeAscending (ComparableTimSort.java:321)     at java.util.ComparableTimSort.sort (ComparableTimSort.java:188) at   java.util.Arrays.sort (Arrays.java:1246) at   mainclass.Personas.general (Personas.java:150) at   mainclass.MainClass.main (MainClass.java:43)   C: \ Users \ Pedro \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml: 53:   Java returned: 1 BUILD FAILED (total time: 35 seconds)

    
asked by Pedro Robles 02.10.2017 в 03:28
source

1 answer

1

The Arrays#sort method compares all elements of the array. If the array has some element with a null value, when you try to compare it with others, it will throw a NullPointerException . For practical purposes, consider the following pseudocode used by the JVM when invoking Arrays#sort :

int comparar(Object objeto1, Object objeto2) {
    return objeto1 > objeto2 ? 1 : objeto1 < objeto2 ? -1 : 0;
}

If one of the elements is null , how can you compare null against some element? Since the JVM does not understand this, throw NullPointerException .

In summary, to use Arrays#sort make sure that all its elements have value .

    
answered by 02.10.2017 в 05:13