Sie sind auf Seite 1von 97

Arrays

Tema 7

Definicin
Estructuras de Datos
Contienen varios elementos relacionados del
mismo tipo

Estticos
Su tamao se define en el momento de su
creacin y no puede cambiar en tiempo de
ejecucin.

Representacin grfica
m

12

10

7
5

8
3

ndices

m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9]

Declaracin:

int[] m;

Creacin:

m=new int[10];

Nombre:

Elementos:

m[0], m[1], m[2], m[3], , m[9]

Tamao:

10

ndices:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Teminologa
Elemento: cada una de las variables que forman
el array. Todos los elementos tienen que ser del
mismo tipo de datos.
ndice: nmero entero que identifica la posicin
de cada elemento dentro del array. El ndice del
primer elemento es cero y la del ltimo el
tamao del array menos 1
Tamao: nmero de elementos del array.
Vectores: arrays de una dimensin.
Matrices: arrays de dos dimensiones.
Arrays=Arreglos
4

Propiedades
Un array es un objeto.
Todos los elementos del array son del mismo
tipo.
El tamao del array se establece cuando se
crea (con el operador new igual que cualquier
otro objeto).
Para acceder a un elemento del array se
especifica la posicin que ocupa dentro del
conjunto de elementos.
Se utilizan como contenedores para guardar
datos relacionados.
6

Declaracin
Para declarar un array se ponen los corchetes
para indicar que se trata de un array y no de
una simple variable del tipo especificado.
Hay dos formas de declarar un array:
tipo[] nombre; // esta es la que utilizaremos
tipo nombre[];
tipo: puede ser primitivo o referenciado
nombre: identificador del array

Al declarar un array Java se crea slo una


variable para contener la referencia
(normalmente 4 bytes) al objeto array pero no
se crea el objeto.
7

Creacin
m=new int[10];
Crea un objeto de tipo array
Reserva memoria para contener el array
Asigna una referencia a la variable de tipo array
(previamente declarada)
Inicializa el array

int[] m=new int[10];


Declarar y crear un array
int[] m ={10, 22, 30, 44, 50, 66, 70, 88, 90, 100};
Tambin puede crearse de forma explcita asignando
valores a todos los elementos del array en el momento
de la declaracin, de la siguiente forma:
8

Inicializacin
Al crear el objeto array el constructor inicializa
todos sus elementos.
Byte0
short 0
int 0
long 0
float 0.0
double 0.0
char /u0000
boolean false
Object (Cualquier tipo de Objeto) null
9

ndice
Se llama ndice la posicin que ocupa
cada elemento en el array.
El ndice del primer elemento es 0 y la del
ltimo ser tamao-1.
Para acceder a un elemento necesitas
saber su ndice.
Si el ndice est fuera del rango permitido,
se produce una excepcin del tipo
ArrayIndexOutOfBoundsException.
10

Programa: Array01
Los elementos del array son inicializados
cuando se crean (no ocurre lo mismo con
las variables)
Para utilizar un elemento del array se
pone el nombre del array seguido de su
posicin entre corchetes.
Los elementos del array pueden ser
utilizados igual que las variables del
mismo tipo.
11

length
Cada array tiene un atributo de instancia
llamada length (constante),
Para conocer cuantos elementos tiene un
array escribiremos su nombre seguido de
.length. Por ejemplo: m.length
El uso ms frecuente de .length es en la
condicin de un bucle for. Por ejemplo:
for(int i=0;i<m.length;i++)
12

Errores frecuentes
Error en tiempo de ejecucin: Olvidar que
los ndices empiezan en cero y por tanto
el ndice de la ltima posicin es length-1
Error de compilacin: escribir m.length()
en lugar de m.length. El mtodo length()
es utilizado en String no en arrays.
Error de compilacin: Declarar un array
con un tamao. Por ejemplo int[100] m, en
lugar de int[] m= new int[100].
13

Programa: Array02
Hacer un programa que sin utilizar arrays:
pida 10 nmeros por teclado,
calcule y muestre la media y
muestre los nmeros mayores que la media.

14

Programa: Array02_v2
Hacer un programa que utilizando arrays:
pida 10 nmeros por teclado,
calcule y muestre la media y
muestre los nmeros mayores que la media.

15

Programa: Array02_v3
Hacer un programa que utilizando arrays:
los 10 nmeros se asignan en la creacin del
array,
calcule y muestre la media y
muestre los nmeros mayores que la media.

16

Ventajas de utilizar arrays


Con muy pocas instrucciones podemos
manipular muchas variables.
Es ms sencillo realizar ciertas operaciones
como bsqueda y ordenacin.
Podemos asociar el ndice de los arrays con un
dato (matrices asociativas). Ejemplos: dado,
palo de una carta, n de plaza en un parking, n
de asiento en un autobs,

17

La clase Arrays (I)


La bibilioteca java.utils contiene la clase Arrays
con funciones de utilidad para los arrays.
Sera necesario incorporar import java.util.*; al
comienzo del archivo fuente.
Ordenar arrays.
public static void sort(tipo[] a)
Comparar arrays:
public static boolean equals(tipo[] a, tipo[] a2)
int v1[] = {1,2,3};
int v2[] = {1,2,3};
System.out.println(Arrays.equals(v1,v2));
18

La clase Arrays (II)


Rellenar arrays.
public static void fill(tipo[] a, tipo val)
Rellenar el array a con el valor del
segundo argumento.
Rellenar el array a entre dos posiciones
dadas con el valor del segundo
argumento.
public static void fill(tipo[] a, int desde, int
hasta, tipo val)
19

La clase Arrays (III)


Buscar en arrays
public static int binarySearch( tipo[] a, tipo
elemento)
Buscar el elemento en el array. Si lo
encuentra devuelve su posicin, si no
devuelve un nmero negativo donde
debera estar.

20

Programa: Array03
Programa en el que tras introducir 10
nmeros enteros por teclado, los muestre
en el orden en que se han introducido y en
orden creciente de sus valores.

21

Programa: Array04
Programa que tras introducir 10 nmeros
enteros los muestre en el orden en que se
han introducido y en el orden inverso al
que han sido introducidos.

22

Programa: Array05
Escribir un programa que pregunte 8
nmeros reales y presente a dos
columnas: los nmeros (en el orden en
que se dieron) y sus races cuadradas (si
de algn nmero no se puede hallar la
raz cuadrada se visualizar NO EXISTE).

23

Programa: Array06
Cargar por teclado las notas enteras de 7 alumnos:
Visualizar: Nota media y n de alumnos aprobados
Consultas: Nota del alumno que te indique el usuario y si est
por encima o debajo de la media. Validar los datos tecleados por
el usuario.
TECLEAR NOTAS
Alumno 1. Nota? 5
Alumno 2. Nota? 6

Alumno 7. Nota? 8
ESTADSTICAS
Nota media = 5.5
N de alumnos aprobados = 4
CONSULTAS
Teclee el n del alumno (0 para finalizar):2
Alumno 2. Su nota es 6. Est por encima de la media.
Teclee el n del alumno (0 para finalizar):_
24

Mtodos para redondeo


Hacer dos mtodos e incluirlos en la clase
MisMetodos
float redondeo(float num, int nDecs)
double redondeo(double num, int nDecs)
Reciben como parmetros un float o double
y devuelven ese mismo nmero
redondeado al n de decimales del
segundo parmetro.
25

Utilizar redondeo
Utiliza el mtodo redondeo, de la clase
MisMetodos, en el ejercicio Array06 para
que la media se calcule y visualice con slo
2 decimales.

26

Programa: Array06_v2
Modificar el programa anterior para que permita introducir
las notas enteras de n alumnos, siendo n un nmero
introducido por el usuario al principio del programa.
Cuntos alumnos hay? 10
Alumno 1. Nota? 5
Alumno 2. Nota? 6

Alumno 10. Nota? 8


ESTADSTICAS
Nota media = 5.5
N de alumnos aprobados = 4
CONSULTAS
Teclee el n del alumno (0 para finalizar):2
Alumno 2. Su nota es 6. Est por encima de la media.
Teclee el n del alumno (0 para finalizar):_
27

Programa: Array07
Cargar por teclado el nombre y apellidos de un alumno y
sus cuatro notas.
Visualizar:

Por cada alumno se visualiza su nombre y su nota media.


El mensaje visualizado debe estar compuesto a partir de la
siguiente instruccin:
StringBuffer mensaje = new StringBuffer("El alumno tiene
una nota media de ");
Un alumno promociona si sus suspensos son como mximo
dos.

Si promociona tambin visualiza sus 4 notas y


Si no promociona visualiza el nmero de suspensos.

El proceso se repite hasta que sea * el nombre que se


introduce.
28

Programa: Array08
Cargar por teclado nmeros entre 1 y 15 hasta que el usuario teclee un 0.
Deseamos calcular y visualizar la siguiente informacin:

Cuntas veces tecleo el 1, cuantas el 2, cuantas el 3, cuantas el 15?


Cuntos nmeros tecleo el usuario?
Qu nmeros fueron los ms tecleados?
Teclea un nmero de 1 a 15(0 para fin): 3
Teclea un nmero de 1 a 15(0 para fin): 4
.
Teclea un nmero de 1 a 15(0 para fin): 0
N
VECES
1
1
2
2
3
4

15
0
El usuario ha tecleado 16 nmeros
Los nmeros ms tecleados lo han sido 4 veces y son los nmeros:
3
9

29

Programa: Array09
Disear un programa que nos permita tirar un dado y visualizar la estadstica
(en porcentaje) de cuantas veces ha salido cada valor.
El nmero de tiradas lo pone el usuario.
Nmero de tiradas (0 para fin): 8
Numero 3
Numero 3
Numero 5
Numero 4
Numero 1
Numero 2
Numero 1
NUMERO PORCENTAJE
1
25.0%
2
12.5%
3
25.0%
4
12.5%
5
0.0%
6
0.0%
Nmero de tiradas (0 para fin): _

30

Arrays y mtodos
Los mtodos tambin pueden devolver arrays.
static int[] cargaArray(int n){
int[] a = new int[n];
for (int i=0;i<a.length;i++)
a[i] = (int) (Math.random() * 20);
return a;
}

O recibir arrays como argumentos. En este caso, el


array se pasa por referencia (como todos los objetos).
static void imprimirArray(int[] v){
//Muestra los elementos del array
for (int i=0;i<=v.length-1;i++)
System.out.println("Elemento " + i + ": " + v[i]);
}

31

Programa: Array09_v2
Modificar el programa Array09 para que
incluya estos dos mtodos:
int[] lanzamientos(int nLanz)

void verPorcentajes(int[] frecuencias)

32

Ejemplo
public static void main(String[] args){
int[] m;

m=lanzamientos(n);
verPorcentajes(m);
..
}//Fin main

33

int[] lanzamientos(int nLanz)


m

(1)

null
(5)

public static void main(String[] args){


int[] m; //(1) Se crea la variable m
n
int n, dado;
(2)
n=leerNumero(); //(2) Suponemos 10
10
while(n!=0) {
m=lanzamientos(n);
3
4
5
(3) Pasa 10

frecuencias
(4)

nLanz
10

(4)

(5)

public static int[] lanzamientos(int nLanz) {


int[] frecuencias=new int[6]; //(4) Crea Array
int dado;
for(int i=0;i<nLanz;i++) {
dado=(int)(Math.random()*6)+1;
System.out.println((i+1)+"\t\t"+dado);
frecuencias[dado-1]++;
}
return frecuencias;//(5) Retorna la referencia 34
}

Programa: Array10
Hacer un programa que tras introducir los
nombres de los 10 primeros clasificados en
el ranking de la ATP y sus puntos. Permita
posteriormente consultar esos datos.

35

Array10 (Introducir datos)


Al arrancar el programa pedir que se introduzcan los nombres y puntuacin
de los 10 primeros tenistas en el ranking de la ATP:
ATP. Ranking. Introduccin de datos
------------------------------------------------1. Nombre?: Nadal
Puntos?: 6675
2. Introducir nombre: Federer
Puntos?: 5305
..
10. Introducir nombre: Blake
Puntos?: 1775
Validaciones:
El n de puntos de un tenista no puede ser nunca mayor al del anterior

Utilizar:
Un mtodo para introducir los nombres y los puntos en los arrays
36

Array10 (Consultar)
Una vez introducidos los datos, el programa mostrar un men como el siguiente:
ATP. Ranking. Consulta
-------------------------------1. Nmero, 2. Nombre, 3. Listado, 4. Fin
Teclee n de opcin:

1.
2.
3.

Pide el n y muestra el nombre y puntos del tenista que ocupa ese puesto
Pide el nombre y muestra la posicin que ocupa y sus puntos.
Listado completo de los tenistas almacenados

En los 3 casos una vez mostrado los datos vuelve al men principal
Validaciones:

El n de opcin deber ser 1, 2, 3 4


El n de la posicin del tenista nunca podr ser mayor que 10

Utilizar:

mtodo para buscar el nombre que devuelva el ndice -1 si no existe,


mtodo para listar el ranking completo

37

Programa: Array11
Una empresa posee 5 sucursales en diferentes
provincias de Castilla y Len. Escribe un programa
que pregunte para cada sucursal:

la provincia,
el nmero de ventas efectuadas y
el importe de cada una de las ventas.

Con estos datos presentar en pantalla el importe


total vendido en cada sucursal y el importe total
vendido en Castilla y Len.
38

Array11: Ejemplo de ejecucin


SUCURSAL 1: Provincia?: Valladolid
Introducir numero ventas: 2
Importe de la venta 1:300.5
Importe de la venta 2:500

SUCURSAL 5: Provincia?: Len


Introducir numero ventas: 3
Importe de la venta 1:300
Importe de la venta 2:400
Importe de la venta 3:1000
Total vendido por la SUCURSAL 1 (Valladolid): 800.5

Total vendido por la SUCURSAL 5 (Len):


1700.0
Importe total vendido por la empresa....6450.0
39

Programa: Array12 (Cargar datos)


1. Cargar por teclado el nombre, edad y nmero de hermanos de
alumnos. Finaliza la carga cuando en el nombre se introduzca un *.
Alumno 1:
nombre (*=FIN)? Pepe
edad? 23
hermanos? 1
Alumno 2:
nombre (*=FIN)? Juan
edad? 39
hermanos? 1
Alumno 3:
nombre (*=FIN)? ana
edad? 54
hermanos? 3
Alumno 4 :
nombre (*=FIN)? *
40

Array12 (men)
2. Visualizar el siguiente men:
1. Visualizar Datos
2. Nombre alumno de mayor edad
3. Nombre de alumnos con ms de 2 hermanos
4. Salir
Introducir un numero (1-4):

41

Array12 (opciones)
1. Visualizar Datos: Nos informa sobre todos los datos metidos
Alumno pepe:
23 aos y 1 hermano(s)
Alumno juan:
39 aos y 1 hermano(s)
Alumno ana:
54 aos y 3 hermano(s)

2. Nombre alumno de mayor edad: El nombre del alumno debe aparecer en


maysculas.
El alumno ANA es el de mayor edad con 54 aos.
3. Nombre de los alumnos con mas de 2 hermanos: El nombre de los alumnos debe
tener el primer carcter en maysculas y el resto en minsculas,
independientemente de cmo se haya introducido.
Alumnos con mas de o exactamente 3 hermanos:
Ana

4. Salir. Termina la ejecucin del programa.

Utilizar mtodos para mejorar el cdigo del programa.

42

Array12_v2
Modificar el ejercicio anterior declarando las
variables:
nombres
edades
hermanos
numAl

como variables de clase.

43

Array13
Un examen tipo test tiene 15 preguntas, con 4
posibles respuestas: a, b, c y d.
Slo hay una respuesta correcta en cada
pregunta
Se desea realizar un programa que corrija el
examen dando el usuario las respuestas de
cada pregunta.
Las respuestas correctas son: 1=a, 2=d, 3=a,
4=a, 5=b, 6=c, 7=a, 8=c, 9=c, 10=c, 11=d, 12=b,
13=b, 14=a, 15=c
44

Array13: Ejemplo de ejecucin


Pregunta 1. respuesta? (a, b, c, d): a
Respuesta correcta

Pregunta 15. respuesta? (a, b, c, d):b


Respuesta incorrecta. La respuesta correcta es c.
Respuestas acertadas =10
Respuestas falladas = 5

45

Array13: respuestas correctas


Tres formas:
String respuestas=adaabcacccdbdac;
respuestas.charAt(0), respuestas.charAt(1),

char[] respuestas ={a, d, a, a, b, c, a, c, c, c, d, b, d,


a, c};
respuestas[0], respuestas[1],

char[] respuestas=adaabcacccdbdac.toCharArray();
respuestas[0], respuestas[1],

46

Array14: Qu hace?
class Array14
{
public static void main(String[] args)
{
int[] m1={1,2,3,4,5,6};
int[] m2;
m2=m1;
m2[0]=10;
System.out.println("m1\tm2");
for(int i=0;i<m1.length;i++)
{
System.out.println(m1[i]+"\t"+m2[i]);
}
}//Fin main
}//Fin class

47

Array14: Explicacin grfica


m1

m2

1
10

int[] m1={1,2,3,4,5,6};
int[] m2;
m2=m1;
m2[0]=10;

48

Array15: Copiar un array en otro


Crear un mtodo llamado copiaArray que
copie un array en otro.
Hacer un programa para probar el mtodo

49

class Array15
{
public static int[] copiarArray(int[] arrayOrigen)
{
int[] arrayDestino=new int[arrayOrigen.length];
for(int i=0;i<arrayOrigen.length;i++)
arrayDestino[i]=arrayOrigen[i];
return arrayDestino;
}
public static void main(String[] args)
{
int[] m1={1,2,3,4,5};
int[] m2=copiarArray(m1);
m2[0]=10;
System.out.println("m1\tm2");
for(int i=0;i<m1.length;i++)
{
System.out.println(m1[i]+"\t"+m2[i]);
}
}//Fin main
}//Fin class

50

public static void main(String[] args)


{
int[] m1={1,2,3,4,5};

m1

arrayOrigen

arrayDestino

10
10

20

30

40

50

60

int[] m2=copiarArray(m1);
m2[0]=10;

m2

public static int[] copiarArray(int[] arrayOrigen)

{
int[] arrayDestino=new int[arrayOrigen.length];
for(int i=0;i<arrayOrigen.length;i++)

arrayDestino[i]=arrayOrigen[i];
return arrayDestino;
}

51

Arrays de 2 dimensiones
int [][] m;
m= new int[2][3];
System.out.println(m.length);
System.out.println(m[0].length);
System.out.println(m[1].length);

m
Filas
0

Columnas
0
1
2
F

Columnas
0
1
2

m[0] [0] m[0] [1] m[0] [2]

Columnas
0
1
2

a
s

m[1] [0] m[1] [1] m[1] [2]


52

Inicializar un array de 2
dimensiones
La primera forma es en la propia declaracin del array.
la utilizaremos cuando sepamos de antemano el contenido del array.
int numeros[][] ={{1,2,3,4},{5,6,7,8}};

La segunda mediante la asignacin directa a los elementos.


La utilizaremos cuando en un determinado punto del programa no
sepamos los elementos que van a formar parte del array.
Ejemplo 1:
Ejemplo 2:
numeros[0][0]=1;
numeros[0][0]=cs1.Keyboard.readInt();
numeros[0][1]=2;
numeros[0][1]=cs1.Keyboard.readInt();
numeros[0][2]=3;
numeros[0][2]=cs1.Keyboard.readInt();
.

numeros[1][3]=8;
numeros[1][3]=cs1.Keyboard.readInt();

53

Array201
Hacer un programa que cargue por teclado los
elementos de una tabla de enteros de 3 filas y
cuatro columnas.
Al final muestra la tabla completa y la suma de
los valores de sus elementos.
m

10 -12 93

12

22

19

40

-8

99

34 110

54

Ejemplo de ejecucin
Cargar tabla
---------------Fila 0:
m[0][0]: 10
m[0][1]: -12
m[0][2]: 93
m[0][3]: 12
Fila 1:
m[1][0]: 22
m[1][1]: 19
m[1][2]: 40
m[1][3]: -8
Fila 2:
m[2][0]: 99
m[2][1]: 3
m[2][2]: 34
m[2][3]: 110

Tabla
------------------------10 -12 93 12
22 19 40 -8
99
3 34 110
Suma 512

10 -12 93

12

22

19

40

-8

99

34 110

55

Array201_v2
Modificar el programa anterior para que muestre
tambin la suma de las filas y de las columnas.
Tabla
------------------------10 -12 93 12
22 19 40 -8
99
3 34 110
Sumas filas:
fila 0=103
fila 1= 73
fila 2=246
Suma columnas:
columna 0=131
columna 1= 10
columna 2=167
columna 3=114
Suma TOTAL = 512
56

Array202
Hacer un programa que inicialice los
elementos de un array de dos dimensiones
de 2 filas y 4 columnas con los valores 1, 2,
3, 4, 5, 6, 7, 8. Los valores 1, 2, 3 y 4 se
asignarn a los elementos de la primera fila
y los restantes en la segunda.

57

Array203
Cargar por teclado los valores de una matriz cuadrada (de 4x4). Visualizar la matriz, la
suma de cada fila y la suma de la diagonal.
Fila 0:
Dato[0][0]? :1
Dato[0][1]? :2
Dato[0][2]? :3
Dato[0][3]? :4
.
.
Fila 3:
Dato[3][0]? :4
Dato[3][1]? :5
Dato[3][2]? :6
Dato[3][3]? :7
Array
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
La suma de la diagonal es: 16

->10
->26
->15
->22

58

Array204

Cargar por teclado el mes y el da de


nacimiento de varias personas.
Visualizar en pantalla el nmero de
personas que ha nacido los das de cada
mes.
La entrada de datos finaliza cuando el
usuario no quiere introducir mas datos.

59

Array204
int[][] fechas = new int[12][31];

"\t"

60

Array204 Cargar datos

61

Array204 Mostrar datos

62

Array204_v2
Modificar el ejercicio anterior aadiendo una
columna con los nombres de nmeros de
los meses (columna 0) y una fila con los
nmeros de los das (fila 0) tal y como se
muestra en la diapositiva siguiente.

63

Array204_v2
int[][] fechas = new int[13][32];

64

Array204_v3
Modificar el programa Array204 para que
muestre los nombres de los meses.

65

Array205
En un Congreso se han inscrito 16 participantes. Escribe
una aplicacin que permita controlar su asistencia durante
los 4 das que dura el congreso.

La aplicacin comenzar preguntando los nombres de los


participantes.
A partir de ese momento ir preguntando uno por uno
quines han hecho acto de presencia el primer da, luego
quines lo han hecho el segundo,...
Finalizado el congreso, la aplicacin mostrar los nombres
de los participantes y, para cada uno de ellos, el nmero
total de das que ha asistido y el porcentaje sobre el total.

66

67

68

Array206
Todos los aos se celebra en Longs (Zaragoza) una
competicin micolgica, en la que se recogen setas de 4
tipos distintos.
Los participantes deben recoger todas las setas que
puedan e irlas entregando al jurado. Un mismo
concursante puede realizar varias entregas.
La competicin termina cuando el nmero total de setas
entregadas (entre todos los participantes) supera el
centenar. Al ltimo participante en entregar se le
contabilizan todas las setas recogidas aunque ya se
hayan superado las 100.
La comisin que organiza el concurso te encarga
realizar una aplicacin que permita controlar el
desarrollo de la competicin.
69

Array206: Inscripcin

La aplicacin empezar preguntando el nmero de participantes y sus


nombres. A cada participante le asignar un nmero de participante
(correlativo desde el 1).

70

Array206: Entregas
Cada vez que llegue
un participante a la
mesa del jurado, la
aplicacin pedir el
nmero del
participante as como
la cantidad de cada
tipo de setas que
entrega.

71

Array206: Ganadores
Terminada la competicin, la
aplicacin dar los nombres de los
4 ganadores (uno para cada tipo
de seta).
Se considerar ganador a aquel
que haya recogido la mayor
cantidad de setas de un tipo
determinado (en caso de empate,
el ganador se elegir por sorteo
entre ellos).
No hay ganador de un tipo de
seta si ningn concursante ha
cogido setas de ese tipo.

72

Array207
Un array bidimensional m de n filas y n
columnas es simtrico si para todos los
elementos se cumple m[x][y]==m[y][x].
Hacer un mtodo que devuelva true
cuando un array es simtrico y false
cuando no lo sea.
Hacer un programa Array207 para probar
el mtodo anterior.
73

Array208
Hacer un programa que reparta aleatoriamente
las 40 cartas de una baraja espaola a 4
jugadores (10 cartas a cada jugador) y lo
muestre en pantalla.
Baraja espaola:
4 palos: oros, copas, espadas y bastos
10 cartas en cada palo: 1, 2, 3, 4, 5, 6, 7, Sota,
Caballo y Rey

Ojo! No entregar la misma carta dos veces


74

Arrays
Ejercicios de repaso

75

Histograma

Un histograma es un grfico que muestra la frecuencia con que aparecen en un


array dado valores dentro de subintervalos especificados de su intervalo.
Por ejemplo, si un array unidimensional de enteros tiene elementos de tipo 0..9 y
contiene los siguientes valores:
644197564239564
Su histograma sera:
0
1*
2*
3*
4****
5*
6**
7*
8
9**

76

Histograma (programa)
Escribir un programa Histograma que, tras
leer las notas de los alumnos en una
asignatura, genere y visualice el
histograma de las notas redondeadas a
valores enteros: 0, 1, 2,...10
Las notas ledas desde el teclado son
valores de tipo real y el nmero de
alumnos no es fijo aunque siempre es
menor de 100.
77

Histograma (ejemplo de ejecucin)


Nota ? (-1=FIN):4.5
Nota ? (-1=FIN):5.25
Nota ? (-1=FIN):8.25
Nota ? (-1=FIN):2
Nota ? (-1=FIN):5.5
Nota ? (-1=FIN):9.25
Nota ? (-1=FIN):2.2
Nota ? (-1=FIN):-1
HISTOGRAMA
0
1
2**
3
4
5**
6*
7
8*
9*
10

78

Primitiva
El juego consiste en que el apostante elige al
comprar su boleto entre los nmeros 1 al 49, un
determinado nmero de ellos, para acertar la
Combinacin Ganadora en el sorteo
correspondiente.
El sorteo consistir en la extraccin de 6 bolas
de las 49 que se extraen del bombo y una
sptima bola que ser el complementario.
El boleto obtendr premio cuando acierte 3, 4,
5, 5+complemetario 6 nmeros de la
combinacin ganadora.
79

Hacer un programa Primitiva que permita realizar apuestas a los apostantes


en una mquina expendedora.
La mquina preguntar al cliente cuantas nmeros desea apostar en su
boleto. El mnimo son 6 y el mximo son 11.
La mquina preguntar al usuario si desea introducir los nmeros de su
boleto o si prefiere que se generen automticamente.
Ojo! No puede haber nmeros repetidos en el boleto.
La mquina mostrar los nmeros apostados en el boleto e indicar su
precio.
El programa finaliza cuando el empleado teclee un nmero secreto cuando
la mquina pida el nmero de apuestas. Por ejemplo 999888.
El programa mostrar el total recaudado antes de finalizar.
Precios de los boletos:

Nmeros

Apuestas

Precio

28

28

84

84

10

210

210

11

462

462

80

Primitiva_v2
Modificar el programa anterior para que una vez
vendidos los boletos realice el sorteo y muestre
los boletos premiados, el n de aciertos y el
premio. El nmero de boletos vendidos nunca va a
ser mayor de 200.
N de aciertos

Premio

1.281.755,30

5+Complem.

17.147,23

2.048,76

60,75

8,00

81

Arrays
2 Trimestre

82

Argumentos en la lnea de rdenes


El mtodo main tiene un argumento args
que es un array unidimensional de tipo
String.
Cundo y para que se utiliza?
Al llamar a un programa desde el SO
escribiendo uno o ms argumentos
El mtodo main recibe estos argumentos y el
primero es asignado a args[0], el segundo a
args[1],
83

Argum01: Cdigo
Visualizar los argumentos pasados a un programa.
class Argum01
{
public static void main(String [] args)
{
for (int i=0 ; i<args.length ; i++)
System.out.println("Argumento n "+(i+1)+":"+args[i] );
}
}

84

Argum01: Ejecucin

1 Activar Run Arguments

2 Escribir los argumentos

85

Argum02
Hacer un programa que reciba exactamente
tres argumentos
El primero una palabra
El segundo un nmero
El tercero el carcter i o el d

Visualiza la palabra del argumento 1 tantas


veces como dice el nmero del argumento
2 anteponiendo la palabra Inverso (i) o
Directo (d) segn el valor del argumento 3.
86

Argum03
Escribir un programa, al que se le pasa como
argumentos en la linea de ordenes, dos nmeros
enteros entre (-100 y 200). El programa debe:

Si los dos nmeros son positivos, calcular el


resultado de elevar el primer nmero al segundo.
(n1n2)
Si uno es positivo y otro negativo, calcular el
resultado de la suma de ellos.
Si los dos son negativos, calcular el mximo y el
mnimo de los valores absolutos de los nmeros.

Validar que exactamente se le pasan dos nmeros


y que estn comprendidos entre esos valores.
87

Argum04
Se desea realizar un histograma con los pesos de los alumnos de un
determinado curso.
Peso Numero de alumnos
___________________________________________
27
*
55
****
El nmero de asteriscos se corresponde con el nmero de alumnos del
peso especificado. En el histograma slo aparecern los pesos que se
corresponden con 1 o ms alumnos.
Suponer que los pesos estn comprendidos entre los valores 10 y
PESO MAXIMO Kg.
Al programa se le pasan como parmetros el PESO MAXIMO (mnimo
80 y mximo 100) y el nmero de alumnos del curso (mnimo 1 y
mximo 20).
Realizar un programa que lea los pesos e imprima el histograma
correspondiente.
88

Ordenacin de Arrays
El metodo sort de la clase Arrays del paquete
java.util permite ordenar arrays siempre y
cuando contenga datos primitivos.
Arrays.sort (arrayParaOrdenar)

En caso de ser objetos, el objeto debe


implementar el interface java.util.Comparable
El objeto String ya lo tiene implementado, por tanto
puede ser utilizado directamente como un dato
primitivo

89

Ordenar01_v1
Hacer un programa que pregunte los
nombre de 5 personas y los muestre
ordenados alfabticamente.

90

Mtodo de la burbuja
Comparamos el primer elemento con el segundo, el segundo con el
tercero, el tercero con el cuarto, etc. Cuando el resultado de una
comparacin sea "mayor que", se intercambian los valores de los
elementos comparados. Con esto conseguimos llevar el valor mayor
a la posicin n.
Repetimos el punto 1, ahora para los n-1 primeros elementos de la
lista. Con esto conseguimos llevar el valor mayor de stos a la
posicin n-1.
Repetimos el punto 1, ahora para los n-2 primeros elementos de la
lista y as sucesivamente.
La ordenacin estar cuando al repetir el isimo proceso de
comparacin no haya habido ningn intercambio o, en el peor de
los casos, despus de repetir el proceso de comparacin descrito n1 veces.

91

for(i=0;i<4;i++)
{
if(m[i]>m[i+1];
intercambia(i, i+1);
}

for(i=0;i<3;i++)
{
if(m[i]>m[i+1];
intercambia(i, i+1);
}
for(i=0;i<2;i++)
{ }

for(i=0;i<1;i++)
{}
92

N fijo de pasadas
public static void bubbleSort1(int[] x)
{
int n = x.length;
for (int pass=1; pass < n; pass++)
{
for (int i=0; i < n-pass; i++)
{
if (x[i] > x[i+1])
{ // intercambiar los elementos
int temp = x[i];
x[i] = x[i+1];
x[i+1] = temp;
}
}
}
}
93

Para cuando no hay intercambio


public static void bubbleSort2(int[] x)
{
boolean doMore = true;
while (doMore)
{
doMore = false; // assume this is last pass over array
for (int i=0; i<x.length-1; i++) {
if (x[i] > x[i+1])
{ // exchange elements
int temp = x[i];
x[i] = x[i+1];
x[i+1] = temp;
doMore = true; // after an exchange, must look again
}
}
}
}

94

Ordenar01_v2
Hacer un programa que pregunte los
nombre de 5 personas y los muestre
ordenados alfabticamente utilizando el
mtodo de la burbuja.

95

Ordenar02_v1
Hacer un programa que pregunte los
nombres y sueldos de 5 personas y los
muestre ordenados por el nombres. (Utilizar
el mtodo de la burbuja)

96

Ordenar02_v2
Hacer un programa que pregunte los
nombres y sueldos de 5 personas y los
muestre ordenados por el sueldo en orden
descendente.

97