Ejemplo 8 - Demostración indexación de datos con vectores

Objetivo

Comprender el uso de vectores para la indexación de datos

Enunciado


Haga un programa que cuente con un vector con la información de cuatro Personas tal y como se muestra en el diagrama y que cuente con cuatro vectores con los valores de los índices para ofrecer ordenamieto alfabético, ordenamiento del de menor al mayor peso y del menor al mayor monto de las deudas.

Solución

El siguiente código muestra como utilizar indexación indirecta, en otras palabras como utilizar el contenido de un vector como índice de otro para ofrecer diferentes ordenamiento de un mismo grupo de datos.

import javax.swing.*;
class DemostracionIndexacionDeVectores {
/** <pre>
* REQUIERE: Que se le pase un vector de enteros para que funcione como indice y el texto para el título
* EFECTUA: Imprime el vector de personas ordenadas de acuerdo al índice precedidas por el titulo
* MODIFICA: Salida en consola
*/
private static void imprimir(Persona personas[],int indice[],String titulo){
System.out.println("\n\nPERSONAS ORDENADAS "+titulo+"\n");
for(int i= 0; i<indice.length; i++){
System.out.println(""+personas[indice[i]]);
}

}
/** <pre>
* REQUIERE: No tiene requisitos específicos
* EFECTUA: Método main con el fin de demostrar la forma de utilizar vectores para indexación
* MODIFICA: Salida en consola
*/
public static void main(String argv[]){
// Se crae un vector de personas cuya información no se quiere replicar en varios lugares
Persona personas[]= new Persona[4];
// Se agregan cuatro personas
personas[0]= new Persona("Melvin",78,100 );
personas[1]= new Persona("Lucia",56,200 );
personas[2]= new Persona("Juan",87,150);
personas[3]= new Persona("Nuria",60, 224);
// Si se crean índices con diferentes ordenamientos se puede tener algo como
int alfabetico[] = {2,1,0,3};
int kilos[] = {2,0,3,1};
int deudas[] = {3,1,2,0};
// Para imprimir los nombres de las personas ordenados alfabéticamente
imprimir(personas,alfabetico,"ALFABETICAMENTE");
// Para imprimir los nombres de las personas del que más debe al que menos debe
imprimir(personas,kilos," SEGUN SU PESO");
// Imprimir nombres de las personas del que más pesa al que menos pesa
imprimir(personas,deudas," POR EL MONTO QUE ADEUDAN");

System.exit(0);
}
}
 

El código anterior hace uso de una clase llamada Persona que se muestra a continuación:

 public class Persona {
  private double peso;  // Es privado.
  private double montoAdeudado;  // Es privado.
  private String nombre;  // Es privado.

  public Persona(String nombre, double peso, double montoAdeudado){
    setPeso(peso);
    setMontoAdeudado(montoAdeudado);
    setNombre(nombre);
  }
  public void setPeso(double peso){
    this.peso = peso ;
  }
  public double getPeso() {
    return peso;
  }
  public void setMontoAdeudado(double montoAdeudado){
    this.montoAdeudado = montoAdeudado;
  } 
  public double getMontoAdeudado(){
    return montoAdeudado;
  }
  public void setNombre(String nombre){
    this.nombre = nombre;
  } 
  public String getNombre(){
    return nombre;
  }
  public String toString(){
    return "NOMBRE: " +nombre+" PESO: "+peso+" Kg  DEUDA: $"+montoAdeudado+" ";
  }
}

La salida del programa en pantalla es la siguiente:

Código Fuente

DemostracionIndexacionDeVectores.java

Persona.java