Está en la página 1de 166

Nivel 3

!"#$%"#&' )*+,'- &$ ".*/0+.'-


!"#$%&'(&)! + ,%$#%!(!)&$- ,$% $./0'$1 &
(234562 753898:5; 7<=<>
Qu vamos a aprender en este nivel:
Utilizar estructuras contenedoras de
tamao fijo para almacenar una secuencia
de valores (simples u objetos)
Utilizar estructuras contenedoras de
tamao variable para almacenar una
secuencia de objetos
Utilizar instrucciones iterativas para
manipular estructuras contenedoras
Crear una clase completa en java
utilizando eclipse


Caso de estudio No. 1: Las
notas de un curso
Las notas de un curso
En el curso hay 12 estudiantes
De cada estudiante se tiene la nota
definitiva (un valor entre 0.0 y 5.0)
Se quiere construir un programa que
permita:
1. Cambiar la nota de un estudiante
2. Calcular el promedio del curso
3. Establecer el nmero de estudiantes que
estn por encima de dicho promedio
Interfaz usuario
Requerimientos Funcionales
Nombre
R1 Cambiar una nota
Resumen
Permite cambiar la nota definitiva de un estudiante del
curso
Entradas
1. El estudiante a quien se quiere cambiar la nota
2. La nueva nota del estudiante
Resultado
Se ha asignado al estudiante la nueva nota.
Requerimientos Funcionales
Nombre
R2 Calcular el promedio
Resumen
Permite calcular la nota promedio de los estudiantes
del curso
Entradas
Ninguna
Resultado
El promedio de las notas de los doce estudiantes del curso
Requerimientos Funcionales
Nombre
R3 Calcular el nmero de estudiantes por encima del
promedio
Resumen
Permite saber cuntos estudiantes tienen una nota
superior a la nota promedio del curso
Entradas
Ninguna
Resultado
Nmero de estudiantes con nota mayor al promedio del curso
Modelo de la Clase
double nota1;
double nota2;
double nota3;
double nota4;
double nota5;
double nota6;
double nota7;
double nota8;
double nota9;
double nota10;
double nota11;
double nota12;
Curso
Modelo de la Clase
double nota1;
double nota2;
double nota3;
double nota4;
double nota5;
double nota6;
double nota7;
double nota8;
double nota9;
double nota10;
double nota11;
double nota12;
Curso
double nota1;
double nota2;
double nota3;
double nota4;
double nota5;
double nota6;
double nota7;
double nota8;
double nota9;
double nota10;
double nota11;
double nota12;
double nota13;
double nota14;
double nota15;
Curso
double nota1;
double nota2;
double nota3;
double nota4;
double nota5;
double nota6;
double nota7;
double nota8;
double nota9;
.
.
.
double nota100;
Curso
Solucin: Contenedora
double nota1;
double nota2;
double nota3;
double nota4;
double nota5;
double nota6;
double nota7;
double nota8;
double nota9;
double nota10;
double nota11;
double nota12;
Curso
double notas =












Curso
0
1
2
3
4
5
6
7
8
9
10
11
UN SOLO
ATRIBUTO
LLAMADO
notas
Arreglo = contenedora de tamao fijo
0 1 2 3 4 5 6 7 8 9 10 11
3.5 5.0 4.5 2.5 4.5 2.5 3.5 4.0 2.0 1.5 3.5 5.0
notas =
notas[0] notas[4] notas[7] notas[11]
Cada posicin del arreglo (casilla) se utiliza como una variable

notas[5] = 3.0;
i = 2;
if ( notas[ i ] > 4.0)
notas[10] = notas[3];
if (notas[11] == notas[0])
notas[0] = 2.0;
else
notas[0] = notas[11];

Declaracin de un arreglo
public class Curso
{
//Constantes
public final static int TOTAL_EST = 12;

//Atributos
private double[ ] notas;

}
Declaracin de un arreglo
public class Curso
{
//Constantes
final public static int TOTAL_EST = 12;

//Atributos
private double[ ] notas;

}
Se declara una
constante para fijar el
tamao del arreglo
TODOS los
elementos del arreglo
son del MISMO TIPO
Inicializacin de un arreglo
public Curso
{
notas = new double [TOTAL_EST];
}
El espacio en memoria (una cajita por posicin del arreglo) queda
reservada.
El valor de los elementos del arreglo es indefinido al comienzo.
Para consultar el nmero de elementos del arreglo: length
notas.length
Si se trata de acceder a una casilla con ndice menor que 0 o mayor
que el nmero mximo de casillas (en este caso 12)
java.lang.ArrayIndexOutOfBoundsException
Para dar valores a los elementos
del arreglo
public void ponerNotasEnCero ( )
{
notas[0] = 0;
notas[1] = 0;
notas[2] = 0;
notas[3] = 0;
notas[4] = 0;
notas[5] = 0;
notas[6] = 0;
notas[7] = 0;
notas[8] = 0;
notas[9] = 0;
notas[10] = 0;
notas[11] = 0;
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma;

suma = notas[0] + ;






return suma;
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma;

suma = notas[0] + notas[1] + notas[2] + notas[3] + notas[4] +
notas[5] + notas[7] + notas[8] + notas[9] + notas[10] + notas[11];

suma = suma / TOTAL_EST;

return suma;
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

(9 veces ms)

suma = suma / TOTAL_EST;

return suma;
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

(9 veces ms)

suma = suma / TOTAL_EST;

return suma;
}

Paso que se repite
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

(9 veces ms)

suma = suma / TOTAL_EST;

return suma;
}

public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

suma += notas[ indice ];
indice++;

(9 veces ms)

suma = suma / TOTAL_EST;

return suma;
}

public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Instrucciones repetitivas
Preparacin
del ciclo
La condicin
es
verdadera?
Ejecuta las
instrucciones
del cuerpo
del ciclo
si
no
Termina el ciclo
inicio
Ejecucin de una instruccin repetitiva
Ejecucin de una instruccin repetitiva
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;
return suma;
}

while y for
<inicio>
while ( <condicin> )
{
<cuerpo>
<avance>
}

for (<inicio>; <condicin>; <avance>)
{
<cuerpo>
}

Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Inicio de las variables de trabajo:
Indice para movernos en el arreglo
Acumulado de la suma de las notas
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Condicin para continuar:
Cualquier expresin lgica
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Cuerpo del ciclo:
Instrucciones que se van a repetir en
cada iteracin
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;
int indice = 0;

while ( indice < TOTAL_EST )
{
suma += notas[ indice ];
indice++;
}

suma = suma / TOTAL_EST;

return suma;
}

Avance del ciclo:
Incremento del ndice que indica la
posicin del arreglo en la que estamos en
un momento dado
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;

for ( int indice = 0; indice < TOTAL_EST; indice ++ )
{
suma += notas[ indice ];
}

suma = suma / TOTAL_EST;

return suma;
}

Inicio de las variables de trabajo:
Indice para movernos en el arreglo
Acumulado de la suma de las notas
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;

for ( int indice = 0; indice < TOTAL_EST; indice ++ )
{
suma += notas[ indice ];
}

suma = suma / TOTAL_EST;

return suma;
}

Condicin para continuar:
Cualquier expresin lgica
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;

for ( int indice = 0; indice < TOTAL_EST; indice ++ )
{
suma += notas[ indice ];
}

suma = suma / TOTAL_EST;

return suma;
}

Cuerpo del ciclo:
Instrucciones que se van a repetir en
cada iteracin
Para calcular el promedio de las
notas del curso
public double promedio ( )
{
double suma = 0.0;

for ( int indice = 0; indice < TOTAL_EST; indice ++ )
{
suma += notas[ indice ];
}

suma = suma / 1 TOTAL_EST;

return suma;
}

Avance del ciclo:
Incremento del ndice que indica la
posicin del arreglo en la que estamos en
un momento dado
Tarea No. 2 - Calcular el nmero de estudiantes que
sacaron una nota entre 3.0 y 5.0
public int cuantosPasaron ( )
{












}

Tarea No. 2 - Calcular la mayor nota del curso
public int mayorNota ( )
{












}

Tarea No. 2 - Contar el nmero de estudiantes que sacaron una nota inferior a
la del estudiante que est en la posicin del arreglo que llega como parmetro.
Suponga que el parmetro posEst tiene un valor entre 0 y TOTAL_EST-1
public int cuantosPeoresQue ( int posEst )
{













}

Tarea No. 2 - Aumentar en un 5% todas las notas del
curso, sin que ninguna de ellas sobrepase el valor de 5.0
public void hacerCurva ( )
{












}

Patrones de recorrido de
arreglos
Patrn de recorrido total
Se usa cuando se necesita recorrer TODO
el arreglo
Ejemplos:
Calcular la suma de TODAS las notas del
curso



Patrn de recorrido total
for ( int indice = 0; indice < arreglo.length; indice++)
{
<cuerpo del ciclo>
}
Indice para movernos
en el arreglo empieza
en CERO
Patrn de recorrido total
for ( int indice = 0; indice < arreglo.length; indice++)
{
<cuerpo del ciclo>
}
Condicin para
continuar: ndice menor
que la longitud del
arreglo
Patrn de recorrido total
for ( int indice = 0; indice < arreglo.length; indice++)
{
<cuerpo del ciclo>
}
Avance: incremento en
1 del ndice
Ejemplo
public void hacerCurva ( )
{
for ( int i = 0; i < notas.length; i++)
{
if ( notas[ i ] < 2.0 )
notas[ i ] = notas[ i ] * 1.1;
}
}
Indice empieza en
CERO
Mientras ndice menor
que la longitud del
arreglo
Incremento en 1 del
ndice
Patrn de recorrido total con
acumulado
Se usa cuando se necesita recorrer TODO
el arreglo y adems ACUMULAR o
CALCULAR alguna propiedad sobre
TODOS los elementos.
Ejemplos:
Contar cuntos estudiantes pasaron
Calcular el promedio


Patrn de recorrido total con
acumulado
Decisiones a tomar:
Cmo acumular?
Cmo inicializar el acumulado?
Condicin para cambiar el acumulado?
Cmo cambiar el acumulado?

Ejemplo
public int cuantosPasaron ( )
{
int cuantos = 0;
for ( int i = 0; i < notas.length; i++)
{
if ( notas[ i ] >= 3.0 )
cuantos++;
}
return cuantos;
}
Cmo acumular?

R/ Con una variable
Ejemplo
public int cuantosPasaron ( )
{
int cuantos = 0;
for ( int i = 0; i < notas.length; i++)
{
if ( notas[ i ] >= 3.0 )
cuantos++;
}
return cuantos;
}
Cmo inicializar el
acumulado?

R/ En cero o en un
valor adaptado al
problema
Ejemplo
public int cuantosPasaron ( )
{
int cuantos = 0;
for ( int i = 0; i < notas.length; i++)
{
if ( notas[ i ] >= 3.0 )
cuantos++;
}
return cuantos;
}
Condicin para
cambiar el acumulado?

R/ En este ejemplo,
cuando el elemento
que se est revisando
sea mayor o
igual a 3
Ejemplo
public int cuantosPasaron ( )
{
int cuantos = 0;
for ( int i = 0; i < notas.length; i++)
{
if ( notas[ i ] >= 3.0 )
cuantos++;
}
return cuantos;
}
Cmo modificar el
acumulado?

R/ En este ejemplo,
incrementndolo en 1
Tarea No. 3: Modificar las notas de los estudiantes de la siguiente
manera: a todos los que obtuvieron mas de 4 les quita 0.5. A todos los
que obtuvieron menos de 2.0, les aumenta 0.5. A todos los dems, les
deja la nota sin modificar
public void cambiarNotas ( )
{











}

Tarea No. 3: Retornar la menor nota del curso
public double menorNota ( )
{












}

Tarea No. 3: Indicar en qu rango hay mas notas en el curso: rango 1
de 0.0 a 1.99, rango 2 de 2.0 a 3.49, rango 3 de 3.5 a 5.0
public int rangoConMasNotas ( )
{












}

Patrn de recorrido parcial
Se usa cuando NO se necesita recorrer TODO
el arreglo
Existe una condicin que debemos verificar en
cada iteracin para saber si debemos detener el
ciclo o volver a repetirlo
Ejemplos:
Decidir si al menos un estudiante sac 5.0
Buscar el primer estudiante con nota igual a cero


Patrn de recorrido parcial
for ( int indice = 0; indice < arreglo.length && !<condicion>; indice++)
{
<cuerpo del ciclo>
}
Indice para movernos
en el arreglo empieza
en CERO
Patrn de recorrido parcial
for ( int indice = 0; indice < arreglo.length && !<condicion>; indice++)
{
<cuerpo del ciclo>
}
Condicin para continuar:
ndice menor que la longitud del arreglo
Y (&&)
no se cumple una condicin
Patrn de recorrido parcial
for ( int indice = 0; indice < arreglo.length && !<condicion>; indice++)
{
<cuerpo del ciclo>
}
Avance: incremento en
1 del ndice
Patrn de recorrido parcial
for ( int indice = 0; indice < arreglo.length && !<condicion>; indice++)
{
<cuerpo del ciclo>
}
A veces la condicin
puede ser difcil de
calcular
SOLUCION
Patrn de recorrido parcial

boolean termino = false;
for ( int indice = 0; indice < arreglo.length && !termino; indice++)
{
<cuerpo del ciclo>
if ( <ya se cumpli el objetivo>)
termino = true;
}
Calcular la condicin dentro del ciclo
y utilizar una variable auxiliar (centinela)
Ejemplo
public boolean alguienConCinco ( )
{
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
termino = true;
}
return termino;
}
0 1 2 3 4 5 6 7 8 9 10 11
3.5 4.5 3.5 5.0 4.5 2.5 3.5 4.0 2.0 1.5 3.5 5.0
notas =
Otra posibilidad: con while y sin
centinela
public boolean alguienConCinco ( )
{
int i = 0;
while ( i < notas.length && notas[ i ] != 5.0 )
{
i++;
}
if ( i == notas.length)
return false;
else
return true;
}
0 1 2 3 4 5 6 7 8 9 10 11
3.5 4.5 3.5 5.0 4.5 2.5 3.5 4.0 2.0 1.5 3.5 5.0
notas =
Otra posibilidad: con while y sin
centinela
public boolean alguienConCinco ( )
{
int i = 0;
while ( i < notas.length && notas[ i ] != 5.0 )
{
i++;
}
return ( i < notas.length );
}
0 1 2 3 4 5 6 7 8 9 10 11
3.5 4.5 3.5 5.0 4.5 2.5 3.5 4.0 2.0 1.5 3.5 5.0
notas =
Patrn de recorrido parcial con
acumulado
Se usa cuando NO se necesita recorrer
TODO el arreglo, sino hasta que se
cumpla una condicin y adems
Se necesita ACUMULAR o CALCULAR
alguna propiedad sobre los elementos.

Ejemplo con acumulado
public void subirTresNotas( )
{
int numNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
if ( numNotas == 3 )
termino = true;
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Una variable para
contar cuntas notas de
1.5 se han subido a 2.5
Ejemplo con acumulado
public void subirTresNotas( )
{
int numNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
if ( numNotas == 3 )
termino = true;
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Una variable centinela
para parar el ciclo
cuando ya se hayan
subido 3 notas
Ejemplo con acumulado
public void subirTresNotas( )
{
int numNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
if ( numNotas == 3 )
termino = true;
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Ciclo desde la primera
posicin del arreglo,
mientras NO haya
llegado al final y NO se
haya cumplido la
condicin del centinela
Ejemplo con acumulado
public void subirTresNotas( )
{
int numNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
if ( numNotas == 3 )
termino = true;
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Si la nota actual (de la
posicin i) es 1.5,
subirla a 2.5 e
incrementar el contador
de notas
Ejemplo con acumulado
public void subirTresNotas( )
{
int numNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
if ( numNotas == 3 )
termino = true;
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Si ya se han subido
TRES notas de 1.5,
entonces poner el
centinela en true para
acabar el ciclo
Otra posibilidad sin centinela
public void subirTresNotas( )
{
int numNotas = 0;

for ( int i = 0; i < notas.length && numNotas < 3; i++)
{
if ( notas[ i ] == 1.5 )
{
numNotas++;
notas[ i ] = 2.5;
}
}
}
Encontrar las primeras TRES notas de 1.5 y asignarles 2.5.
Se pone la condicin de
continuacin
directamente en el ciclo
Ejemplo con acumulado
public int tercerCinco( )
{
int cuantosCincos = 0;
int posicin = 0;
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
cuantosCincos++;
if ( cuantosCincos == 3 )
{
termino = true;
posicion = i;
}
}
return posicion;
}
Mtodo que retorna la posicin en el arreglo de la tercera nota con valor 5.0
Dos variables para
acumular la informacin
Ejemplo con acumulado
public int tercerCinco( )
{
int cuantosCincos = 0;
int posicin = 0;
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
cuantosCincos++;
if ( cuantosCincos == 3 )
{
termino = true;
posicion = i;
}
}
return posicion;
}
Mtodo que retorna la posicin en el arreglo de la tercera nota con valor 5.0
Variable centinela del
ciclo
Ejemplo con acumulado
public int tercerCinco( )
{
int cuantosCincos = 0;
int posicin = 0;
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
cuantosCincos++;
if ( cuantosCincos == 3 )
{
termino = true;
posicion = i;
}
}
return posicion;
}
Mtodo que retorna la posicin en el arreglo de la tercera nota con valor 5.0
Condicin con el centinela
Ejemplo con acumulado
public int tercerCinco( )
{
int cuantosCincos = 0;
int posicin = 0;
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
cuantosCincos++;
if ( cuantosCincos == 3 )
{
termino = true;
posicion = i;
}
}
return posicion;
}
Mtodo que retorna la posicin en el arreglo de la tercera nota con valor 5.0
Condicin para cambiar el acumulado
Ejemplo con acumulado
public int tercerCinco( )
{
int cuantosCincos = 0;
int posicin = 0;
boolean termino = false;
for ( int i = 0; i < notas.length && !termino; i++)
{
if ( notas[ i ] == 5.0 )
cuantosCincos++;
if ( cuantosCincos == 3 )
{
termino = true;
posicion = i;
}
}
return posicion;
}
Mtodo que retorna la posicin en el arreglo de la tercera nota con valor 5.0
Condicin para cambiar el centinela y
salir del ciclo
0 1 2 3 4 5 6 7 8 9 10 11
5.0 4.5 3.5 5.0 4.5 5.0 3.5 4.0 2.0 1.5 3.5 5.0
notas =
Tarea No. 4: Remplazar todas las notas del curso por 0.0 hasta que
aparezca la primera nota superior a 3.0
public void notasACero ( )
{












}

Tarea No. 4: Calcular el nmero mnimo de notas del curso necesarias
para que la suma supere el valor 30, recorrindolas desde la posicin 0
en adelante. Si al sumar todas las notas no se llega a ese valor, el
mtodo debe retornar -1
public int sumadasDanTreinta ( )
{









}

Tarea No. 4: Calcular el nmero mnimo de notas del curso necesarias
para que la suma supere el valor 30, recorrindolas desde la posicin 0
en adelante. Si al sumar todas las notas no se llega a ese valor, el
mtodo debe retornar -1
public int sumadasDanTreinta ( )
{
double sumaNotas = 0;
int cuantasNotas = 0;
boolean termino = false;

for ( int i = 0; i < notas.length && !termino; i++)
{
sumaNotas += notas[ i ];
cuantasNotas++;
if (sumaNotas >= 30)
termino = true;
}
if (i == notas.lenght)
return -1;
else
return cuantasNotas;
}

Caso de estudio: El Avin
Interfaz usuario
Modelo del Mundo
Constantes
Constantes
Arreglo con
42 sillas
Arreglo con
8 sillas
Asociacin
opcional
La clase Avion
public class Avion
{
//Constantes
public final static int SILLAS_EJECUTIVAS = 8;
public final static int SILLAS_ECONOMICAS = 42;

//Atributos
private Silla[] sillasEjecutivas;
private Silla[] sillasEconomicas;
}


La clase Silla
public class Silla
{
// Constantes
public final static int CLASE_EJECUTIVA = 1;
public final static int CLASE_ECONOMICA = 2;
public final static int VENTANA = 1;
public final static int CENTRAL = 2;
public final static int PASILLO = 3;

// Atributos
private int numero;
private int clase;
private int ubicacion;
private Pasajero pasajero;
}


La clase Pasajero
public class Pasajero
{
// Atributos
private int cedula;
private String nombre;
}


Un objeto de la
clase Avin podra
verse as
Tarea No.6 Hacer la declaracin de la clase Pasajero
public class Pasajero
{
//-----------------------------------
// Atributos
//-----------------------------------




//-----------------------------------
// Constructor
//-----------------------------------
public Pasajero( int unaCedula, String unNombre )
{



}

Tarea No.6 Hacer la declaracin de la clase Pasajero
public class Pasajero
{
//-----------------------------------
// Mtodos
//-----------------------------------
public int darCedula( )
{


}

public String darNombre( )
{



}
}
Tarea No.7 Completar la declaracin de la clase Silla
public class Silla
{
//-------------------------------------------
// Constantes
//-------------------------------------------
public final static int CLASE_EJECUTIVA = 1;
public final static int CLASE_ECONOMICA = 2;
public final static int VENTANA = 1;



//-------------------------------------------
// Atributos
//-------------------------------------------
private int numero;
private int clase;
private int ubicacion;
private Pasajero pasajero;
Tarea No.7 Completar la declaracin de la clase Silla
public class Silla
{
public Silla( int num, int clas, int ubica )
{
numero = num;
clase = clas;
ubicacion = ubica;
pasajero = null;
}

public void asignarPasajero( Pasajero pas )
{



}
Tarea No.7 Completar la declaracin de la clase Silla
public void desasignarSilla ( )
{


}


public boolean sillaAsignada( )
{




}

public int darNumero( )
{


}
Tarea No.7 Completar la declaracin de la clase Silla
public int darClase( )
{


}


pubic int darUbicacion( )
{



}

public Pasajero darPasajero( )
{



}
La clase Avion
public class Avion
{
//Constantes
public final static int SILLAS_EJECUTIVAS = 8;
public final static int SILLAS_ECONOMICAS = 42;

//Atributos
private Silla[] sillasEjecutivas;
private Silla[] sillasEconomicas;
}


Mtodo constructor de la clase Avion
public Avion( )
{
// Crea las sillas ejecutivas y economicas
sillasEjecutivas = new Silla[SILLAS_EJECUTIVAS];
sillasEconomicas = new Silla[SILLAS_ECONOMICAS];

sillasEjecutivas[ 0 ] = new Silla( 1, Silla.CLASE_EJECUTIVA, Silla.VENTANA );
sillasEjecutivas[ 1 ] = new Silla( 2, Silla.CLASE_EJECUTIVA, Silla.PASILLO );
sillasEjecutivas[ 2 ] = new Silla( 3, Silla.CLASE_EJECUTIVA, Silla.PASILLO );
sillasEjecutivas[ 3 ] = new Silla( 4, Silla.CLASE_EJECUTIVA, Silla.VENTANA );
sillasEjecutivas[ 4 ] = new Silla( 5, Silla.CLASE_EJECUTIVA, Silla.VENTANA );
sillasEjecutivas[ 5 ] = new Silla( 6, Silla.CLASE_EJECUTIVA, Silla.PASILLO );
sillasEjecutivas[ 6 ] = new Silla( 7, Silla.CLASE_EJECUTIVA, Silla.PASILLO );
sillasEjecutivas[ 7 ] = new Silla( 8, Silla.CLASE_EJECUTIVA, Silla.VENTANA );

sillasEconomicas[ 0 ] = new Silla( 9, Silla.CLASE_ECONOMICA, Silla.PASILLO );
sillasEconomicas[ 1 ] = new Silla( 10, Silla.CLASE_ECONOMICA, Silla.CENTRAL );

}
Un objeto de la
clase Avin podra
verse as
Preguntas frecuentes
Cmo se hace el llamado a un mtodo
de un objeto que est en el arreglo?

R// sillasEjecutivas[ 3 ].sillaAsignada( )

Los objetos que estn en el arreglo se
pueden guardar en una variable ?
R// SI.
Silla sillaTemp = sillasEjecutivas [ 0 ];

Volvamos al arreglo de notas
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )
{
if ( notas [ i ] >= 3.0 )
contador++;
}

return contador;
}

Contar cuntas notas estn por encima de 3.0 (o sea cuntos
estudiantes pasaron)
FACIL !!!
Pasemos al avin
En qu se parece al caso anterior (cuantosPasaron) ?



En qu se diferencia?
Cul es el arreglo en este problema ?


Qu estamos buscando ?
Contar cuntas sillas ejecutivas estn libres (o sea no asignadas)
Transformacin
public int cuantosPasaron ( )
{












}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
public int cuantasSillasEjecutivasLibres ( )
{












}

Transformacin
public int cuantosPasaron ( )
{
int contador = 0;











}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
public int cuantasSillasEjecutivasLibres ( )
{












}

Transformacin
public int cuantosPasaron ( )
{
int contador = 0;











}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;











}

Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )









}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;











}

Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )









}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;

for ( int i = 0; i < sillasEjecutivas.length; i++ )









}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )
{
if ( notas [ i ] >= 3.0 )
contador++;
}





}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;

for ( int i = 0; i < sillasEjecutivas.length; i++ )









}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )
{
if ( notas [ i ] >= 3.0 )
contador++;
}





}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;

for ( int i = 0; i < sillasEjecutivas.length; i++ )
{
if ( sillasEjecutivas[ i ].sillaAsignada( ) == false )
contador++;
}





}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )
{
if ( notas [ i ] >= 3.0 )
contador++;
}

return contador;



}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;

for ( int i = 0; i < sillasEjecutivas.length; i++ )
{
if ( sillasEjecutivas[ i ].sillaAsignada( ) == false )
contador++;
}





}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
Transformacin
public int cuantosPasaron ( )
{
int contador = 0;

for ( int i = 0; i < notas.length; i++ )
{
if ( notas [ i ] >= 3.0 )
contador++;
}

return contador;



}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;

for ( int i = 0; i < sillasEjecutivas.length; i++ )
{
if ( sillasEjecutivas[ i ].sillaAsignada( ) == false )
contador++;
}

return contador;



}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
Ahora con variables auxiliares
public int cuantosPasaron ( )
{
int contador = 0;
double notaAux;

for ( int i = 0; i < notas.length; i++ )
{
notaAux = notas[ i ];
if ( notaAux >= 3.0 )
contador++;
}

return contador;



}

public int cuantasSillasEjecutivasLibres ( )
{
int contador = 0;
Silla sillaAux;

for ( int i = 0; i < sillasEjecutivas.length; i++ )
{
sillaAux = sillasEjecutivas[ i ];
if ( sillaAux.sillaAsignada( ) == false )
contador++;
}

return contador;



}

Caso de las notas del curso
(mtodo de la clase Curso)
Caso avin (mtodo
de la clase Avion)
En la clase AVION:

Contar cuntas sillas de clase econmica tienen ubicacin VENTANA
public int contarVentanasEconomica ( )
{









}



En la clase AVION:

Contar cuntas sillas de clase econmica tienen ubicacin VENTANA
public int contarVentanasEconomica ( )
{
int contador = 0;
Silla sillaAux;

for ( int i = 0; i < sillasEconomicas.length; i++ )
{
sillaAux = sillasEconomicas[ i ];
if ( sillaAux.darUbicacion( ) == Silla.VENTANA)
contador++;
}

return contador;


En la clase AVION:

Contar cuntas sillas de clase econmica tienen una ubicacin dada
(que se recibe como parmetro)
public int contarSillasEconomicasEnUbicacion ( int ubi )
{










}


En la clase AVION:

Contar cuntas sillas de clase econmica tienen una ubicacin dada
(que se recibe como parmetro)
public int contarSillasEconomicasEnUbicacion ( int ubi )
{
int contador = 0;
Silla sillaAux;

for ( int i = 0; i < sillasEconomicas.length; i++ )
{
sillaAux = sillasEconomicas[ i ];
if ( sillaAux.darUbicacion( ) == ubi )
contador++;
}

return contador;


En la clase AVION:

Informar (verdadero o falso) si un pasajero dado se encuentra en la
clase ejecutiva del avin (la cdula del pasajero se recibe como
parmetro)

public boolean existePasajeroEjecutivo ( int ced )

AYUDAS:
1. Es un patrn de recorrido parcial
2. Utilice el mtodo darPasajero( ) de la clase Silla para obtener el
pasajero de una silla
3. Recuerde que una silla puede o no estar asignada (una silla est
asignada cuando su pasajero existe. Una silla NO est asignada
cuando su pasajero no existe (es null))
4. Utilice el mtodo darCedula( ) de la clase Pasajero, para obtener el
nmero de cdula del pasajero de una silla

En la clase AVION:

Informar (verdadero o falso) si un pasajero dado se encuentra en la
clase ejecutiva del avin (la cdula del pasajero se recibe como
parmetro)
public bool existePasajeroEjecutivo( int ced )
{










}

Caso de estudio: Tienda de
Libros
Contenedoras de tamao
variable o vectores (ArrayList)
Interfaz usuario
Modelo del Mundo
La tienda
tiene un
carrito de
compras
Nmero
indeterminado
de objetos
Cada
compra
hace
referencia a
un libro del
catlogo
En el carrito puede
haber cero o ms
tems de compra
Un objeto de la clase
TiendaLibros podra
verse as
La clase TiendaLibros
public class TiendaLibros
{
//Atributos
private ArrayList catalogo;
private CarroCompras carrito;
}


La clase Libro
public class Libro
{
// Atributos
private String titulo;
private String isbn;
private int precio;
}


La clase CarroCompras
public class CarroCompras
{
// Atributos
private ArrayList itemsCompra;
}


La clase ItemCompra
public class ItemCompra
{
// Atributos
private Libro libro;
private int cantidad;
}


Contenedoras de tamao
variable o vectores (ArrayList)
Contenedoras de tamao variable
o vectores
Se usan cuando NO conocemos el
tamao de la contenedora (cantidad de
elementos que se van a guardar)

Para implementarlas en Java es necesario
utilizar una clase de Java que se llama
ArrayList (se encuentra en el paquete
java.util)
Diferencias entre arreglos y vectores
Tamao fijo

Permite almacenar
elementos de tipo simple
(int, float, double) y objetos

Para implementarlos en
java, existe una sintaxis
especial:
[ ]: para obtener un elemento
del arreglo
length: para conocer la
longitud
Tamao variable

NO permite almacenar
elementos de tipo simple
(int, float, double), SOLO
objetos
Para implementarlos en
java debemos utilizar una
clase especial de java
(ArrayList).
Para manipular un vector
se utiliza entonces la
misma sintaxis que
utilizamos para manejar
cualquier otra clase
(llamado a mtodos)
ARREGLOS VECTORES
Declaracin de un vector
import java.util.*;

public class TiendaLibros
{
private ArrayList catalogo;

private CarroCompras carrito;

}
Se importa el paquete de java
donde se encuentra la clase
ArrayList
Declaracin de un vector
import java.util.*;

public class TiendaLibros
{
private ArrayList catalogo;

private CarroCompras carrito;

}
catalogo es un vector
Declaracin de un vector
import java.util.*;

public class TiendaLibros
{
private ArrayList catalogo;

private CarroCompras carrito;

}
carrito es un objeto de
la clase CarroCompras
Declaracin de un vector
import java.util.*;

public class CarroCompras
{
private ArrayList itemsCompra;

}
Se importa el paquete de java
donde se encuentra la clase
ArrayList
itemsCompra es un
vector
Inicializacin y tamao de un vector

public TiendaLibros( )
{
catalogo = new ArrayList( );
carrito = new CarroCompras( );
}
En el mtodo constructor de la clase
TiendaLibros
Inicializacin y tamao de un vector

public TiendaLibros( )
{
catalogo = new ArrayList( );
carrito = new CarroCompras( );
}
Se usa la misma
sintaxis que para crear
un objeto de cualquier
clase (new)

No se dice cuntos
elementos va a tener
el vector. El tamao
inicial es 0 (cero).

No se dice de que
tipo son los objetos
que se van a guardar
en l
Para conocer el nmero de
elementos que hay en un vector
isEmpty( ) - Es un mtodo que retorna verdadero si el vector no
tiene elementos, y falso en caso contrario.
size( ) Es un mtodo que retorna el nmero de elementos que hay
en el vector
En la clase La expresin Se interpreta
TiendaLibros catalogo.size( )
TiendaLibros catalogo.size( ) == 10
TiendaLibros catalogo.isEmpty( ) == true

Catalogo.isEmpty( )
CarroCompras itemsCompra.size( )
Patrn de recorrido total
for ( int i = 0; i < notas.length; i++)
{
<cuerpo del ciclo>
}
En arreglos En vectores
for ( int i = 0; i < catalogo.size( ); i++)
{
<cuerpo del ciclo>
}
Acceso a los elementos de un vector
vector.get ( pos )
Mtodo get
de la clase
ArrayList
Parmetro que indica la
posicin del elemento
que se quiere obtener
Nombre del
vector
Ejemplo en la clase TiendaLibros
public int inventario( )
{
int sumaPrecios = 0;
Libro libroAux;

for ( int i = 0; i < catalogo.size( ); i++)
{
libroAux = ( Libro ) catalogo.get( i );
sumaPrecios += libroAux.darPrecio( );
}
return sumaPrecios;
}
Variable auxiliar o
temporal de tipo
Libro
Ejemplo en la clase TiendaLibros
public int inventario( )
{
int sumaPrecios = 0;
Libro libroAux;

for ( int i = 0; i < catalogo.size( ); i++)
{
libroAux = ( Libro ) catalogo.get( i );
sumaPrecios += libroAux.darPrecio( );
}
return sumaPrecios;
}
Recorrido total
hasta el final del
vector catalogo
Ejemplo en la clase TiendaLibros
public int inventario( )
{
int sumaPrecios = 0;
Libro libroAux;

for ( int i = 0; i < catalogo.size( ); i++)
{
libroAux = ( Libro ) catalogo.get( i );
sumaPrecios += libroAux.darPrecio( );
}
return sumaPrecios;
}
Obtencin del
elemento de la
posicin i del
vector
Ejemplo en la clase TiendaLibros
public int inventario( )
{
int sumaPrecios = 0;
Libro libroAux;

for ( int i = 0; i < catalogo.size( ); i++)
{
libroAux = ( Libro ) catalogo.get( i );
sumaPrecios += libroAux.darPrecio( );
}
return sumaPrecios;
}
Se especifica el
tipo del objeto
Ejemplo en la clase TiendaLibros
public int inventario( )
{
int sumaPrecios = 0;
Libro libroAux;

for ( int i = 0; i < catalogo.size( ); i++)
{
libroAux = ( Libro ) catalogo.get( i );
sumaPrecios += libroAux.darPrecio( );
}
return sumaPrecios;
}
Llamado al
mtodo darPrecio
del libroAux
Agregar un elemento al final de un
vector
vector.add ( objeto )
Mtodo add
de la clase
ArrayList
Parmetro que es el
objeto que se va a
agregar al vector
Nombre del
vector
Insertar un elemento en una posicin
dada dentro de un vector
vector.add ( indice, objeto )
Mtodo add
de la clase
ArrayList
Parmetro que es el
objeto que se va a
insertar en el vector
Nombre del
vector
Parmetro que indica la
posicin donde se va a
insertar el elemento
Ejemplo en la clase TiendaLibros
public void agregarTresLibros( )
{
Libro libroAux1 = new Libro(Cien aos de soledad, 98657, 15000);
Libro libroAux2 = new Libro(La inmortalidad, 23758, 23800);
Libro libroAux3 = new Libro(El perfume, 5759308, 42100);

catalogo.add( libroAux1 );
catalogo.add( libroAux2 );
catalogo.add( 1, libroAux3 );
}
Remplazar un elemento en un vector
vector.set ( indice, objeto )
Mtodo set
de la clase
ArrayList
Parmetro que es el
nuevo objeto que va a
remplazar el anterior en
el vector
Nombre del
vector
Parmetro que indica la
posicin donde se va a
remplazar el elemento
Ejemplo en la clase TiendaLibros
public void intercambiar( int pos1, int pos2 )
{
Libro libroAux1;
Libro libroAux2;

libroAux1 = (Libro) catalogo.get( pos1 );
libroAux2 = (Libro) catalogo.get( pos2 );
catalogo.set( pos1, libroAux2 );
catalogo.set( pos2, libroAux1 );
}
Eliminar un elemento de un vector
vector.remove ( indice )
Mtodo remove
de la clase
ArrayList
Nombre del
vector
Parmetro que indica la
posicin del elemento que se
desea eliminar
Tarea No. 10 - En la clase TiendaLibros:

Localizar un libro en el catalogo, dado su ISBN (que se recibe como
parmetro). Si no lo encuentra, el mtodo debe retornar null
public Libro buscarLibro ( String isbn)
{










}

Tarea No. 10 - En la clase TiendaLibros:

Adicionar un libro en el catlogo, si no existe ya un libro con ese ISBN.
Utilice el mtodo anterior para identificar el caso en el cual ya hay un
libro con ese ISBN. El libro que se desea adicionar se recibe como
parmetro.
public void adicionarLibroCatalogo ( Libro nuevoLibro)
{










}

Tarea No. 11 - En la clase CarroCompras:

Adicionar una cantidad de ejemplares de un libro al pedido actual. El
mtodo debe considerar el caso en el que el libro ya se encuentre en el
pedido, caso en el cual solo debe incrementar el nmero de
ejemplares. Si el libro no se encuentra, el mtodo debe crear un nuevo
item ItemCompra. El libro que se desea adicionar, as como la cantidad
se reciben como parmetros.
public void adicionarCompra ( Libro lib, int cant)
{







}

Tarea No. 11 - En la clase CarroCompra:

Calcular el monto total de la compra del usuario. Para esto debe tener
en cuenta el precio de cada libro y el nmero de ejemplares de cada
uno que hay en el pedido.
public int calcularValorTotalCompra ( )
{










}

Tarea No. 11 - En la clase CarroCompra:

Eliminar del pedido el libro que tiene el ISBN dado como parmetro. Si
no hay ningn libro con ese ISBN, el mtodo no hace nada.
public void borrarItemCompra( String isbn)
{










}

Patrn de doble recorrido
Se usa cuando por CADA ELEMENTO del
arreglo se debe hacer un recorrido
COMPLETO
Ejemplos:
Encontrar la nota que aparece un mayor
nmero de veces en el curso



Patrn de doble recorrido
for ( int indice1 = 0; indice1 < arreglo.length; indice1++)
{
for (int indice2 = 0; indice2 < arreglo.length; indice2++)
{
<cuerpo del ciclo interno>
}
<cuerpo del ciclo externo>
}
2 ciclos
2 ndices
Patrn de doble recorrido
for ( int indice1 = 0; indice1 < arreglo.length; indice1++)
{
for (int indice2 = 0; indice2 < arreglo.length; indice2++)
{
<cuerpo del ciclo interno>
}
<cuerpo del ciclo externo>
}
0 1 2 3 4 5 6 7 8 9 10 11
5.0 4.5 3.5 5.0 4.5 5.0 3.5 4.0 2.0 1.5 3.5 5.0
notas =
indice1: avanza
lentamente
Indice2: avanza
rpidamente. Cada vez
que ndice1 se
incrementa en una
unidad, indice2 recorre
TODO el arreglo
Ejemplo
public double masVecesAparece( )
{
Qu hacer ???
}
Encontrar la nota que aparece un mayor nmero de veces en el curso
0 1 2 3 4 5 6 7 8 9 10 11
5.0 4.5 3.5 5.0 4.5 5.0 3.5 4.0 2.0 1.5 3.5 5.0
notas =
Ejemplo
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
for (int j = 0; j < notas.length; j++)
{
<cuerpo del ciclo interno>
}
<cuerpo del ciclo externo>
}
return notaMasVecesAparece;
}
Encontrar la nota que aparece un mayor nmero de veces en el curso
El resultado lo vamos a
dejar en una variable
llamada
notasMasVecesAparece, la
cual retornamos al final del
mtodo
Ejemplo
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
for (int j = 0; j < notas.length; j++)
{
<cuerpo del ciclo interno>
}
<cuerpo del ciclo externo>
}
return notaMasVecesAparece;
}
Encontrar la nota que aparece un mayor nmero de veces en el curso
Armamos la estructura del
mtodo a partir del esqueleto
del patrn.
Utilizamos las variables i y j
para llevar los ndices de cada
uno de los ciclos
Ejemplo
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
for (int j = 0; j < notas.length; j++)
{
<cuerpo del ciclo interno>
}
<cuerpo del ciclo externo>
}
return notaMasVecesAparece;
}
Encontrar la nota que aparece un mayor nmero de veces en el curso
Hay dos problemas para
resolver:
1) Contar el nmero de veces
que aparece en el arreglo
el valor que est en la
casilla i
2) Encontrar el mayor valor
entre los calculados por el
primer problema
public double masVecesAparece( )
{
double notaMasVecesAparece = 0.0;

for ( int i = 0; i < notas.length; i++)
{
for (int j = 0; j < notas.length; j++)
{
<contar cuantas veces aparece }
la nota buscada (notas [ i ])>
}
<verificar si es la nota mas frecuente>
}
return notaMasVecesAparece;
}
Ejemplo
Encontrar la nota que aparece un mayor nmero de veces en el curso
Hay dos problemas para
resolver:
1) Contar el nmero de veces
que aparece en el arreglo
el valor que est en la
casilla i
2) Encontrar el mayor valor
entre los calculados por el
primer problema
Primer problema: contar el nmero de veces que
aparece en el arreglo el valor que est en la casilla i
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;

for (int j = 0; j < notas.length; j++)
{
if ( notas[ j ] == notaBuscada )
contador++;
}
<verificar si es la nota mas frecuente>
}
return notaMasVecesAparece;
}
Dejamos en la variable
notaBuscada, la nota para
la cual queremos contar el
nmero de ocurrencias. La
inicializamos con la nota de
la casilla i.
Primer problema: contar el nmero de veces que
aparece en el arreglo el valor que est en la casilla i
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;

for (int j = 0; j < notas.length; j++)
{
if ( notas[ j ] == notaBuscada )
contador++;
}
<verificar si es la nota mas frecuente>
}
return notaMasVecesAparece;
}
Usamos una segunda
variable llamada contador
para acumular all el nmero
de veces que aparece la
nota buscada.
Primer problema: contar el nmero de veces que
aparece en el arreglo el valor que est en la casilla i
public double masVecesAparece( )
{
double notasMasVecesAparece = 0.0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;

for (int j = 0; j < notas.length; j++)
{
if ( notas[ j ] == notaBuscada )
contador++;
}
<verificar si es la nota mas frecuente>
}
return notaMasVecesAparece;
}
En el ciclo interno, vamos a
contar cuntas veces
aparece la nota buscada.
Se incrementa el contador
cada vez que notaBuscada
sea igual a notas[ j ].
Segundo problema: Encontrar el mayor valor entre los
calculados por el primer problema
public double masVecesAparece( )
{
double notaMasVecesAparece = 0.0;
int numeroVecesAparece = 0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;
for (int j = 0; j < notas.length; j++)
{
if ( notas [ j ] == notaBuscada )
contador++;
}
if ( contador > numeroVecesAparece)
{
notasMasVecesAparece = notaBuscada;
numeroVecesAparece = contador;
}
}
return notaMasVecesAparece;
}
Usamos esta variable para
indicar la nota que hasta el
momento aparece mas
veces
Segundo problema: Encontrar el mayor valor entre los
calculados por el primer problema
public double masVecesAparece( )
{
double notaMasVecesAparece = 0.0;
int numeroVecesAparece = 0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;
for (int j = 0; j < notas.length; j++)
{
if ( notas [ j ] == notaBuscada )
contador++;
}
if ( contador > numeroVecesAparece)
{
notasMasVecesAparece = notaBuscada;
numeroVecesAparece = contador;
}
}
return notaMasVecesAparece;
}
Usamos esta variable para
contar cuntas veces
aparece la nota
notaMasVecesAparece
Segundo problema: Encontrar el mayor valor entre los
calculados por el primer problema
public double masVecesAparece( )
{
double notaMasVecesAparece = 0.0;
int numeroVecesAparece = 0;
for ( int i = 0; i < notas.length; i++)
{
double notaBuscada = notas[ i ];
int contador = 0;
for (int j = 0; j < notas.length; j++)
{
if ( notas [ j ] == notaBuscada )
contador++;
}
if ( contador > numeroVecesAparece)
{
notasMasVecesAparece = notaBuscada;
numeroVecesAparece = contador;
}
}
return notaMasVecesAparece;
}
Definimos el caso en el cual
debemos cambiar el
acumulado: si encontramos
un valor que aparezca mas
veces que el que tenamos
hasta el momento (contador
> numeroVecesAparece)
debemos actualizar los
valores de las variables
Conclusin
Para resolver un problema que implique doble
recorrido:
Primero debemos identificar los dos problemas que
queremos resolver (uno con cada ciclo)
Luego, debemos tratar de resolverlos
independientemente, usando los patrones de
recorrido total o parcial
Si para resolver el problema, se necesita un
tercer ciclo anidado, debemos escribir mtodos
separados que ayuden a resolver cada
problema individualmente (nivel 4), porque la
solucin directa es muy compleja y propensa a
errores.
Tarea No. 5: Calcular una nota del curso tal que la mitad de las notas
sean menores o iguales a ella. Si hay varias que lo cumplan, puede
retornar cualquiera.
public double notaMediana ( )
{












}

Ahora con la Tienda de Libros
public boolean hayDobleTitulo( )
{
Qu hacer ???
}
Tarea: Informar (verdadero o falso) si en el catlogo de la tienda de
libros hay dos libros con el mismo ttulo
Ahora con la Tienda de Libros
public boolean hayDobleTitulo( )
{













}
Tarea: Informar (verdadero o falso) si en el catlogo de la tienda de
libros hay dos libros con el mismo ttulo

También podría gustarte