sábado, 14 de julio de 2012

3.3.1 Arreglos de Objetos


Arreglos de Objetos
Los objetos también pueden ser utilizados como elementos de un arreglo o de una matriz, pero su uso tiene que ser más cuidadoso que el de un dato primitivo (int, double, char, etc), pues un objeto contiene valores y métodos que toma de la clase que lo representa.
Un arreglo de una dimensión de objetos se define como:
Clase nombre_arreglo [] = new Clase[tamaño];
Un arreglo de dos dimensiones de objetos se define como:
Clase nombre_arreglo [][] = new Clase[tamaño-renglones][tamaño-columnas];
Algunos ejemplos pueden ser:
//define un arreglo de 10 objetos de la clase Cuenta
Cuenta arreglo[] = new Cuenta[10];
//define un arreglo de 3 renglones y 4 columnas de la clase Persona
Persona arreglo[][] = new Persona[3][4];
Supongamos que queremos utilizar una aplicación sencilla para tomar datos y crear objetos en un arreglo de la clase Cuenta, podríamos utilizar la siguiente aplicación:
Clase Cuenta
public class Cuenta {
private String nombre; // nombre del cliente
private int numero; // numero de la cuenta
private double saldo; // saldo de la cuenta
// método para construir una cuenta vacía
public Cuenta() {
nombre = “”;
numero = 0;
saldo = 0.0d;
}
// método para construir una cuenta con valores
public Cuenta(int numero, String nombre, double saldo) {
this.nombre = nombre;
this.numero = numero;
this.saldo = saldo;
}
// método que te dá el nombre de la cuenta
public String obtenNombre() {
return nombre;
}
// método que te dá el número de la cuenta
public int obtenNumero() {
return numero;
}
// método que te dá el saldo de una cuenta
public double obtenSaldo() {
return saldo;
}
// método que sirve para cambiar el valor del nombre
public void cambiaNombre(String nombre) {
this.nombre = nombre;
}

// método que sirve para cambiar el valor del saldo
public void cambiaNumero(int numero) {
this.numero = numero;
}

// método que sirve para cambiar el valor del saldo
public void cambiaSaldo(double saldo) {
this.saldo = saldo;
}
// método para depositar
public void deposita(double cantidad) {
cambiaSaldo(obtenSaldo() + cantidad);
}
// método para retirar
public boolean retira(double cantidad) {
if (cantidad <= obtenSaldo()) {
cambiaSaldo(obtenSaldo() - cantidad);
return true;
}
return false;
}
}

Clase de la Aplicación
import java.io.*;
public class AplicacionArrObjeto1 {
private static Cuenta arreglo[];
// para pedir los valores de teclado de el arreglo de cuentas ya creada
public static void pide_arreglo() throws IOException{
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
int n;
int numero;
String nombre;
double saldo;
System.out.println(“¿Cuantos objetos deseas crear?”);
n = Integer.parseInt(in.readLine());
// creamos el arreglo de cuentas
arreglo = new Cuenta[n];
// pedimos cada valor para crear un objeto cuenta
for (int i=0; i<n; i++) {
System.out.print(“Da el numero de la cuenta “ + (i+1)+ “ : “);
numero = Integer.parseInt(in.readLine());
System.out.print(“Da el nombre de la cuenta “ + (i+1)+ “ : “);
nombre = in.readLine();
System.out.print(“Da el saldo de la cuenta “ + (i+1)+ “ : “);
saldo = Double.parseDouble(in.readLine());
// se crea el objeto de la clase Cuenta como elemento del arreglo
arreglo [i] = new Cuenta(numero, nombre, saldo);
}
}
// para desplegar los datos del arreglo de cuentas
public static void despliega_arreglo() {
System.out.println(“Numero Nombre Saldo”);
for (Cuenta objeto:arreglo) {
System.out.println(“ “ + objeto.obtenNumero() + “ “ +
objeto.obtenNombre() + “ “ + objeto.obtenSaldo());
}
}
// obteniendo la suma de los saldos de todas las cuentas
public static double suma() {
double total = 0.0d;
for (int i=0; i<arreglo.length; i++) {
Cuenta objeto = arreglo[i];
total += objeto.obtenSaldo();
}
return total;
}
// para calcular el promedio de la matriz cualquiera que sea
public static double promedio() {
double total = 0.0d;
for (int i=0; i<arreglo.length; i++) {
Cuenta objeto = arreglo[i];
total += objeto.obtenSaldo();
}
return total/arreglo.length;
}
public static void main(String[] args) throws IOException {
char opcion;
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
arreglo = null;
opcion = ‘ ‘;
while (opcion != ‘5’) {
System.out.println(“ Menu de Cuentas”);
System.out.println();
System.out.println(“1. Pedir datos para crear Cuentas”);
System.out.println(“2. Desplegar todas las cuentas”);
System.out.println(“3. Desplegar Suma de los saldos”);
System.out.println(“4. Desplegar Promedio de los saldos”);
System.out.println(“5. Fin”);
System.out.println(“¿Opcion deseada (1-5) ?”);
opcion = in.readLine().charAt(0);
switch (opcion) {
case (‘1’) :
System.out.println(“Pidiendo datos arreglo Cuentas”);
pide_arreglo();
System.out.println(“ “ + arreglo.length);
break;
case (‘2’) :
System.out.println(“Desplegando arreglo de Cuentas”);
despliega_arreglo();
break;
case (‘3’) :
System.out.println(“Suma de los saldos = “ + suma());
break;
case (‘4’) :
System.out.println(“Promedio de los saldos = “ + promedio());
break;
case (‘5’) :
System.out.println(“Hasta Luego!”);
break;
default:
System.out.println(“Opcion debe ser de 1 a 5”);
break;
};
}

}

}


Entre lo que despliega esta aplicación tenemos
Opción 1.-


Opción 2.-


Opción 3.-


Opción 4.-


Y finalmente opción 5.-


Observemos como en el método para sumar los saldos, pudimos haber utilizado la forma rudimentaria para tomar cada uno de los elementos del arreglo, a través del índice:

for (int i=0; i<arreglo.length; i++) {
Cuenta objeto = arreglo[i];
total += objeto.obtenSaldo();
}

Pero en Java versión 1.5 Se puede utilizar la forma:
for (Cuenta objeto : arreglo) {
total += objeto.obtenSaldo();
}

En esta nueva versión del for, el objeto de la clase Cuenta va tomando cada uno de los objetos del arreglo y entra al for, para sumar su saldo a total.

No hay comentarios:

Publicar un comentario