Foro de elhacker.net

Programación => Java => Mensaje iniciado por: JAZzZ en 5 Agosto 2017, 19:40 pm



Título: Necesito agregar a mi archivo un metodo para ordenar - JAVA
Publicado por: JAZzZ en 5 Agosto 2017, 19:40 pm
Tengo los siguientes archivos:

Clase Principal:

Código
  1. package prueba;
  2.  
  3. import clases.*;
  4.  
  5. public class Principal {
  6.  
  7.  public static void main(String[] args) {
  8.    Persona aux[]=new Persona[3];
  9.    aux[0] = new Persona("Pedro", 1980);
  10.    aux[1] = new Persona("Maria", 1990);
  11.    aux[2] = new Persona("Juan", 1995);
  12.  
  13.  
  14.    ArregloPersonas ap=new ArregloPersonas(aux,3);
  15.    System.out.println(ap.toString());
  16.    System.out.println("Edad promedio: " + ap.getEdadPromedio());
  17.    //Consultando edad de una persona
  18.    String n="Carlos";
  19.    int e=ap.consultaEdad(n);
  20.    if (e != 0)
  21.      System.out.println("La edad de " + n + " es " + e + " años");
  22.    else
  23.      System.out.println("No se hallo la persona");
  24.    //Nombre de la persona de mayor edad
  25.    System.out.println("Persona de mayor edad: " + ap.nombreMayor());
  26.  
  27.    //Listado de personas ordenados alfabeticamente
  28.  
  29.  
  30.  }
  31.  
  32. }


Arrego llamado: ArregloPersonas:

Código
  1. package clases;
  2.  
  3. public class ArregloPersonas {
  4.  
  5.  private Persona lista[];//arreglo
  6.  private int tamanio;
  7.  
  8.  public ArregloPersonas(Persona[] lista, int tamanio) {
  9.    this.lista = lista;
  10.    this.tamanio = tamanio;
  11.  }
  12.  
  13.  public ArregloPersonas() {
  14.    this.lista = new Persona[5];
  15.    this.tamanio = 5;
  16.    for (int i = 0; i < this.tamanio; i++) {
  17.      lista[i] = new Persona();
  18.    }
  19.  }
  20.  
  21.  public Persona[] getLista() {
  22.    return lista;
  23.  }
  24.  
  25.  /**
  26.    * @param lista the lista to set
  27.    */
  28.  public void setLista(Persona[] lista) {
  29.    this.lista = lista;
  30.  }
  31.  
  32.  /**
  33.    * @return the tamanio
  34.    */
  35.  public int getTamanio() {
  36.    return tamanio;
  37.  }
  38.  
  39.  /**
  40.    * @param tamanio the tamanio to set
  41.    */
  42.  public void setTamanio(int tamanio) {
  43.    this.tamanio = tamanio;
  44.  }
  45.  
  46.  @Override
  47.  public String toString() {
  48.    String texto = "";
  49.    for (int i = 0; i < lista.length; i++) {
  50.      texto += lista[i].toString() + ","
  51.        + lista[i].getEdad() + "\n";
  52.    }
  53.    return texto;
  54.  }
  55.  
  56.  public double getEdadPromedio() {
  57.    int s = 0;
  58.    for (int i = 0; i < lista.length; i++) {
  59.      s += lista[i].getEdad();
  60.    }
  61.    return (double) s / lista.length;
  62.  }
  63.  
  64.  public int consultaEdad(String nombre) {
  65.    int r = 0, c = 0;
  66.    while (c < lista.length && !nombre.equals(lista[c].getNombres())) {
  67.      c++;
  68.    }
  69.    if (c < lista.length) {
  70.      r = lista[c].getEdad();
  71.    }
  72.    return r;
  73.  }
  74.  
  75.  //Metodo que retorne el nombre de la persona de mayor edad
  76.  public String nombreMayor() {
  77.    String r = null;
  78.    int mayor = 0;
  79.    for (int i = 0; i < lista.length; i++) {
  80.      if (lista[i].getEdad() > mayor) {
  81.        mayor = lista[i].getEdad();
  82.        r = lista[i].getNombres();
  83.      }
  84.    }
  85.    return r;
  86.  }
  87.  
  88.  //metodo de ordenacion
  89.  
  90.  
  91. }

Quiero agregar el Listado de personas ordenados alfabeticamente, tengo que agregar en el Arreglo y en la Clase PRincipal; AYUDA PLEASE!!!!


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Necesito agregar a mi archivo un metodo para ordenar - JAVA
Publicado por: ivancea96 en 5 Agosto 2017, 21:40 pm
Tienes el método "Arrays.sort(array, comparator)". Existe el método sin el segundo parámetro, pero dado que tu clase Persona no es comparable (intuyo), hay que pasarle un comparador.

El comparador es una clase anónima, sin más:

Código
  1. Arrays.sort(array, new Comparator<Persona>() {
  2.    @Override
  3.    public int compare(Persona p1, Persona p2) {
  4.        return p1.getNombres().compareTo(p2.getNombres());
  5.    }
  6. });

Intuyo que getNombres es el método mediante el cual obtienes el nombre con el cual ordenar.
compare y compareTo retornan 0 si son iguales, un número negativo si el primero es menor o un número positivo si el primero es mayor.

"Arrays.sort" llamará a "Comparator.compare" cada vez que necesite comparar dos elementos.

Y bueno, dónde aplicar este "Arrays.sort" ya queda a tu elección.