0% encontró este documento útil (0 votos)
145 vistas41 páginas

Tema01 Arreglos y ArrayList2015 02

Este documento presenta un resumen de arreglos y ArrayList en Java. Explica conceptos como arreglos de objetos, arreglos llenados parcialmente, cómo copiar arreglos, histogramas y el paso de arreglos como parámetros a métodos. Incluye ejemplos como simular el lanzamiento de monedas, actualizar un arreglo diariamente y calcular promedios móviles usando arreglos.

Cargado por

Marco Fraquet
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
145 vistas41 páginas

Tema01 Arreglos y ArrayList2015 02

Este documento presenta un resumen de arreglos y ArrayList en Java. Explica conceptos como arreglos de objetos, arreglos llenados parcialmente, cómo copiar arreglos, histogramas y el paso de arreglos como parámetros a métodos. Incluye ejemplos como simular el lanzamiento de monedas, actualizar un arreglo diariamente y calcular promedios móviles usando arreglos.

Cargado por

Marco Fraquet
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 41

Fundamentos de

Programación 2

Ing. Marco Aedo López

EPIS – 2015 [email protected] [email protected]


Arreglos (Arrays) y ArrayList

Capítulo 1

EPIS UNSA - 2008 [email protected]


9. Arreglos de Objetos
 Ejercicio: crear un arreglo de n Personas,
almacenando datos que ingresemos para cada una.
Luego que los muestre
9. Arreglos de Objetos
9. Arreglos de Objetos
 Ejercicio: mostrar al amigo más joven y al mayor de
todos
int minIdx = 0; //index to the youngest person
int maxIdx = 0; //index to the oldest person

for (int i = 1; i < misAmigos.length; i++)


if ( misAmigos[i].getAge() < misAmigos[minIdx].getAge() )
minIdx = i; //found a younger person
else if (misAmigos[i].getAge() > misAmigos[maxIdx].getAge() )
maxIdx = i; //found an older person

//misAmigos[minIdx] is the youngest and misAmigos[maxIdx] is the


oldest
9. Arreglos de Objetos
 Ejercicio: crear un arreglo con capacidad máxima
de n Personas, almacenando datos que vayamos
ingresando, hasta que ya no querramos ingresar
más. Luego que los muestre
9. Arreglos de Objetos
 Ejercicio: búsqueda y eliminación
10. Arreglos llenados parcialmente

 Usamos parte de los elementos del arreglo, pero no


todos
 Sería necesario llevar el rastro del número de
elementos llenados en el arreglo, de tal manera que
se procesarían sólo ellos, no todos los elementos del
arreglo
 La variable elementosIngresados hace el
seguimiento de la cantidad de elementos ingresados
que tiene el arreglo
11. Copiando un arreglo

 Recordar: como con todos los objetos y sus variables


de referencia, si asignamos una variable de referencia
de un arreglo a otra variable de referencia de otro
arreglo, ambas variables de referencia apuntarán al
mismo objeto arreglo
 Si nuestra meta es hacer una copia de un arreglo
arr1, ¿cuál sería el problema?
arr2 = arr1;
11. Copiando un arreglo
 Usualmente desearíamos que el original y la
copia del arreglo apunten a diferentes objetos
de arreglo
 Hacerlo asignando los elementos, uno a uno
EJERCICIO
 Tiene un arreglo con 6 precios que maneja la tienda en
Enero, se quiere un nuevo arreglo para Febrero con los
mismos valores de Enero, pero cambiando el segundo
valor a 10.99
 Salida:
Ene Feb
1.29 1.29
9.99 10.99
22.00 22.00
4.55 4.55
7.35 7.35
6.49 6.49
11. Copiando un arreglo
11. Copiando un arreglo

 Copiar datos de un arreglo a otro es una tarea común,


así Java nos brinda un método especial
System.arraycopy
 Permite copiar un número de elementos desde cualquier
lugar en un arreglo a cualquier lugar en otro arreglo
System.arraycopy(preciosEnero,0,preciosFebrero,0,6);
preciosFebrero[1]=10.99;
 Argumentos:
 Nombre arreglo origen
 Índice del primer elemento del origen a copiar
 Nombre del arreglo de destino
 Índice del primer elemento a reemplazar en el destino
 Número total de elementos a copiar
12. Histogramas

 Gráfico que muestra cantidades para un conjunto de


categorías. Muestra con barras, de mayor o menor
tamaño
12. Histogramas
 Problema:
 Suponga que tiene 3 monedas, al lanzar las 3 monedas una
cantidad de veces Ud. desea saber cuántas veces salió 0
caras, 1 caras, 2 caras y 3 caras. En otras palabras desea
saber la probabilidad (distribución de frecuencia) para el
número de caras
 Solución:
 Escribir un main() que simula el lanzamiento de 3 monedas
un millón de veces
 Imprimir los resultados de la simulación en forma de
histograma:
 Para cada posible caso (4 posibles), imprime una barra que
represente el número de veces que el caso ocurra
 Para simular una barra, usar serie de *, donde cada uno
represente un 1% del número total de lanzamientos
12. Histogramas

 Salida:
Número de veces que cada caso ocurría (0, 1, 2, 3 caras):
0 124685 ************
1 374759 *************************************
2 375420 **************************************
3 125136 *************

 Tips para la implementación:


 Usar un arreglo frequencia para mantener el seguimiento
del número de veces que cada valor de cuenta de caras
ocurre. La frecuencia[0] tiene el número de veces en que
ninguna de las 3 salió cara. La frecuencia[1] tiene el número
de veces en que salió 1 cara, etc.
 Después de cada lanzamiento simulado, añadir 1 al elemento
apropiado
Histograms
public class Fundamentos2 {
public static void main(String[] args)
{
final int NUM_OF_COINS = 3; // numero de monedas a lanzar
final int NUM_OF_REPS = 1000000; // numero de lanzamientos o repeticiones

int[] frequency; //almacena la frecuencia


int heads; // numero de caras en el actual lanzamiento
float fractionOfReps; // numero de veces que una cantidad de caras salio, dividido por
el total de lanzamientos
int numOfAsterisks; // numero de asteriscos a considerar para cada caso

frequency = new int[NUM_OF_COINS + 1]; //4 casos


for (int rep=0; rep<NUM_OF_REPS; rep++)
{
heads = 0;
for (int i=0; i<NUM_OF_COINS; i++)
heads += (int) (Math.random() * 2); //1 es cara
frequency[heads]++; // actualiza la cuenta
}
System.out.println("Numero de veces en que cada contador de caras salio:");
for (heads=0; heads<=NUM_OF_COINS; heads++)
{
System.out.print(" " + heads + " " + frequency[heads] + " ");
fractionOfReps = (float) frequency[heads] / NUM_OF_REPS;
numOfAsterisks = Math.round(fractionOfReps * 100); //el número de * a representar
for (int i=0; i<numOfAsterisks; i++)
System.out.print("*");

System.out.println();
}
}
}
EJERCICIO
 Ud. tiene el arreglo horas con la cantidad de horas que
debe trabajar desde hoy hasta dentro de 30 días. Este
arreglo debe actualizarse al día siguiente, desplazando
todas las cantidad de horas en 1 día hacia adelante, e
ingresando la cantidad de horas a trabajar en el día 30.
Ingresar la cantidad de días que desea que pasen y
simular cómo se va actualizando el arreglo horas día a
día
EJERCICIO
 Tenemos el índice Dow Jones de la Bolsa de Valores de
New York para los últimos 4 días [9400, 9500, 9600, 9700]
(desde hace 4 días hasta ayer)
 Al final de cada día, a partir de hoy, queremos saber el
promedio de los últimos 4 días incluyendo hoy
 El programa pide ingresar la cantidad de días a evaluar y
nos irá mostrando el promedio día a día
Ingrese numero de dias: 4
Ingrese el nuevo valor: 9800
El promedio es 9650
Ingrese el nuevo valor: 9800
El promedio es 9725
Ingrese el nuevo valor: 9700
El promedio es 9750
Ingrese el nuevo valor: 9600
El promedio es 9725
13. Paso de arreglos a métodos

 Los métodos también pueden aceptar argumentos de


tipo arreglo
 Siempre lo hace por valor, pero no se pasa toda una
copia del arreglo
 Se pasa una copia de la dirección del arreglo o
referencia al arreglo (con esa dirección se puede
alterar los valores del arreglo)
13. Paso de arreglos a métodos
Code A public int buscaMinimo(double[] number))
{
double[] arrayUno=new double[20];

minimo = buscaMinimo(arrayUno);

En A antes de buscaMinimo
arrayUno
A. Variable local
number no existe
antes de la ejecucion
del método

State of
Memory
13. Paso de arreglos a métodos
Code public int buscaMinimo(double[] number))
{
double[] arrayUno=new double[20]; B
minimo = buscaMinimo(arrayUno); …

La direccion se copia en B
arrayUno number
B. El valor del
argumento, que es una
direccion, es copiado en
el parametro

State of
Memory
13. Paso de arreglos a métodos
Code public int buscaMinimo(double[] number))
{
double[] arrayUno=new double[20];

minimo = buscaMinimo(arrayUno);
C
}

Mientras en C dentro del método

arrayUno number C. El arreglo es


accedido via
number dentro
del metodo.

State of
Memory
13. Paso de arreglos a métodos
Code public int buscaMinimo(double[] number))
{
double[] arrayUno=new double[20];

minimo = buscaMinimo(arrayUno);

D }

En D después de buscaMinimo

arrayUno D. El parametro
number es borrado. El
argumento arrayUno
aún apunta al mismo
objeto
State of
Memory
13. Paso de arreglos a métodos
13. Paso de arreglos a métodos
13. Paso de arreglos a métodos

PROBLEMA:
Método que me devuelva la suma de todos los
elementos de un arreglo
13. Paso de arreglos a métodos
13. Paso de arreglos a métodos

PROBLEMA:
Sumar 2 arreglos unidimensionales de tamaño 10 con
valores de notas enteras que vayan entre 0..20 y
almacenarlos en un nuevo arreglo. Luego que imprima los
valores de la suma con el formato:
“x + y = z”
Crear métodos:
1) generar genera los valores aleatorios de los 2 arreglos
2) sumar calcula la suma de los 2 arreglos
3) imprimir imprime con el formato indicado
13. Paso de arreglos a métodos

PROBLEMA:
Crear métodos ingresar(), modificar(), imprimir(),
que permitan ingresar los n enteros de un arreglo,
modificar multiplicando por 2 sus elementos e
imprimir sus elementos. Los métodos deben
permitir trabajar con arreglos unidimensionales de
cualquier tamaño. Crear un main() que pruebe
dichos métodos
4. Paso de arreglos a métodos
14. Buscando en un arreglo
 Es frecuente la necesidad de determinar si un arreglo
contiene un valor en particular
 Cuando mantenemos una colección de datos, una de
las operaciones que necesitaremos es un método de
búsqueda para localizar un elemento
 Este es el planteamiento del problema:
Dado un valor x, devolver el índice de x en el arreglo,
si tal x existe. Caso contrario, retornar -1
(NO_ENCONTRADO). Asumimos que no existen
elementos duplicados en el arreglo
14. Buscando en un arreglo
 Primera aproximación: Búsqueda Lineal (de inicio a fin)

numeros
0 1 2 3 4 5 6 7 8
23 17 5 90 12 44 38 84 77

Busqueda fallida: busqueda( 45 ) -1 (NO_ENCONTRADO)

Busqueda exitosa: busqueda( 12 ) 4


14. Buscando en un arreglo
 Pseudocódigo Búsqueda Lineal:
busquedaLineal(lista[], valor)
para i desde 0 hasta lista.longitud-1 inc 1
si lista[i]==valor
retornar i
finSi
finCiclo
retornar -1
FIN
 Implementar el método en Java
14. Buscando en un arreglo
 Otra implementación de Búsqueda Lineal:

public int busquedaLineal ( int[] numeros, int valorBuscado )


{
int loc = 0;
while (loc < numeros.length && numeros[loc] != valorBuscado)
loc++;
if (loc == numeros.length) // No encontrado
return -1;
else
return loc; // Encontrado, retorna la posicion
}
Consideración de Diseño:
Cohesion
 Note que el método busquedaLineal no muestra el
valor encontrado en el arreglo. Tampoco muestra un
mensaje si es que se encontró o no
 En vez de eso, devuelve la posición en donde se
encontró el elemento ó -1 si es que no fue encontrado
 Esto sigue el principio de cohesion - un método sólo
debe realizar una sola tarea. En este caso, debe dejarse
a quién llamo al método si algún mensaje debe ser
devuelto
14. Buscando en un arreglo

 Problema:
 Crear un programa que indique si se encontró o no
un id en un arreglo de ids, también que muestre en
qué posición logró encontrarlo
 Escribir un método encontrarEstudiante que
busca un id dentro de un arreglo de ids
 El método encontrarEstudiante debería recibir
el arreglo estudiantesIds y un id como
parámetros y retornar el valor del índice donde
encuentre el id dentro del arreglo
 Si el id no se encontró, retornar -1
11. Buscando en un arreglo
14. Buscando en un arreglo

 Problema:
 ¿En un arreglo ordenado?
Arreglos (Arrays) y ArrayList

Gracias

También podría gustarte