miércoles, 19 de octubre de 2016

Java básico #18

ArrayList de Objetos

Vamos a escribir un programa que crea un ArrayList de objetos de tipo Persona. El programa pedirá por teclado los datos sobre las personas y lo guardará en array. Posteriormente mostrará por pantalla lo siguiente:

  • Todas las personas
  • Todas las personas ordenadas de menor a mayor altura
Primero crearemos la clase Persona:

package ArrayListObjetos;
 
public class Persona {
 private String nombre;
 private String colorOjos;
 private int altura;
 public String getNombre() {
  return nombre;
 }
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 public String getColorOjos() {
  return colorOjos;
 }
 public void setColorOjos(String colorOjos) {
  this.colorOjos = colorOjos;
 }
 public int getAltura() {
  return altura;
 }
 public void setAltura(int altura) {
  this.altura = altura;
 }
 
 @Override //Sobreescibimos un método, ya lo veremos más adelante
 public String toString(){
  StringBuilder sb = new StringBuilder();
  sb.append("\nNombre");
  sb.append(nombre);
  sb.append("\nColorOjos");
  sb.append(colorOjos);
  sb.append("\nAltura");
  sb.append(altura);
  return sb.toString();
 }
}

A continuación, la clase principal de nuestro proyecto:

package ArrayListObjetos;
 
import java.util.*;
 
public class Main {
 //Creamos un ArrayList para guardar objetos de tipo Persona
 static ArrayList<Persona> personas = new ArrayList<Persona>(); 
 static Scanner sc = new Scanner(System.in);
 
 //método main
 public static void main(String[] args) {
  leerPersonas();
  System.out.println("\nPersonas Introducidas:");
  mostrarPersonas();
  System.out.println("\nPersonas de menor a mayor altura");
  mostrarPorAltura();
 }
 public static void leerPersonas(){
  String nombre;
  String colorOjos;
  int altura;
 
  Persona aux;
  int i, N;
 
  do{
   System.out.println("Número de personas? ");
   N = sc.nextInt();
  }while(N < 0);
  sc.nextLine(); //Limpiamos el buffer de entrada
 
  //lectura de N personas
  for(i=1;i<=N;i++){
   System.out.println("Persona " + i);
   nombre = sc.nextLine();
   System.out.println("Color de ojos: ");
   colorOjos = sc.nextLine();
   System.out.println("Altura en cm: ");
   altura = sc.nextInt();
   sc.nextLine(); //Limpiamos el buffer de entrada
 
   aux = new Persona(); //Se crea el objeto Persona
   //Se asignan valores a los atributos del nuevo objeto
   aux.setNombre(nombre);
   aux.setAltura(altura);
 
   //Se añade el objeto al final del array
   personas.add(aux);
 
  }
 }
 //Método para mostrar todas las personas
 public static void mostrarPersonas(){
  for(int i=0;i<personas.size();i++){
   System.out.println(personas.get(i)); //Se invoca el método toString de la clase Persona
  }
 }
 
   //Método que ordena de menor a mayor altura las personas
   public static void mostrarPorAltura(){
    int i,j;
    Persona aux;
    for(i=0;i<personas.size()-1;i++){
     for(j=0;j<personas.size()-i-1;j++){
      if(personas.get(i+1).getAltura() < personas.get(j).getAltura()){
       aux = new Persona();
       personas.set(j+1, personas.get(j));
       personas.set(j, aux);
      }
     mostrarPersonas();
     }
    }
   }
 }

Solución al ejercicio anterior:

package ArrayList;
 
import java.util.Scanner;           
import java.util.ArrayList;
import java.util.Iterator;
 
//Estas tres importaciones se pueden resumir poniedo import java.util.*;
 
public class Main {
 public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  ArrayList<Integer> numeros = new ArrayList<Integer>();
  int n;
 
  do{
   System.out.println("Introduce número enteros. Introduce 0 para acabar");
   System.out.println("Número: ");
   n = sc.nextInt();
   if(n != 0){ 
    numeros.add(n);
   }
  }while(n != 0);
 
  System.out.println("Ha introducido: " + numeros.size() + " números");
 
  //Mostramos el ArrayList completo
  System.out.println(numeros);
 
  //Recorrido usando un Iterator
  Iterator it = numeros.iterator();
  while(it.hasNext()){
   System.out.println(it.next());
  }
 
  //Recorrido usando foreach para sumar los elementos
  double suma = 0;
  for(int i : numeros){ //Tambíen podemos poner int i, pero es más recomendable poner Integer
         //que es el nombre de la clase de los enteros
   suma += i; //Es lo mismo que poner suma = suma + i
  }
  System.out.println("Suma: " + suma);
  System.out.println("Media: " + suma/numeros.size());
 }
 
}

No hay comentarios:

Publicar un comentario