2025-04-30-Programacion - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Solución tarea tema 9 . Colecciones
Buenos días, como tuvimos un problema del apagón eléctrico en la anterior tutoría y dado que no
00:00:00
vamos a tener muchas clases para poder ir completando el temario, también me habéis
00:00:06
hecho la propuesta por ahí en algún foro, vamos a hacer un pequeño vídeo resolviendo la
00:00:12
tarea del tema 9. Esta tarea consistía en seleccionar un tipo de jugada, teníamos
00:00:16
dos opciones que era jugada de cartas con baraja española o con baraja francesa. Luego a través de
00:00:25
los parámetros de entrada de la aplicación se introducían tres datos. Una era el número de
00:00:33
jugadores, aquí tenemos algunos ejemplos, el número de jugadores como primer dato, el número de cartas
00:00:38
que tenía cada uno de los jugadores y a continuación se indicaba con un cero si trabajábamos con la
00:00:44
baraja española o la baraja francesa. Cada una de las barajas pues bueno tiene una serie de
00:00:49
cartas que son diferentes en un caso o en otro y en el caso el ejercicio nos propone que en el
00:00:55
caso de introducir a través de los parámetros 4 5 1 se entiende que el juego al que se pretende
00:01:01
con el que se pretende trabajar es póker uno es baraja francesa y por ser póker además hay que
00:01:08
añadir dos cartas adicionales que serían los comodines bueno vamos nos ponemos en marcha y
00:01:14
vamos desarrollando el ejercicio a la par que vamos repasando el enunciado.
00:01:21
Para ello nos venimos a Eclipse, damos de alta un nuevo proyecto, podemos llamarlo
00:01:28
tarea 10, es el tema 10 sobre el que estamos trabajando. Vamos a crear una clase
00:01:33
en el proyecto, todo el desarrollo lo podemos hacer en una clase, también podría
00:01:51
estar distribuida según el diseño en varias clases. Este ejemplo lo voy a poner
00:01:54
ya en una única clase, hoy perdón, creo que es el tema 9, bueno de igual nombre el proyecto, ponemos
00:01:59
tema 9 y aquí bueno vamos a empezar definiendo el método main, que recibe un array de strings
00:02:06
que es precisamente a través del cual va a obtener los datos de parámetros de entrada del programa,
00:02:29
el número de jugadores, número de cartas y baraja con la que vamos a trabajar. Podemos definir una
00:02:35
serie de atributos en la clase que nos permitan identificar cada uno de estos todos estos datos
00:02:41
vamos a trabajar con ellos estáticos vamos a necesitar instanciar más de un objeto de la
00:02:47
clase para 9 para tema 9 y si lo definimos estático es bueno no va a resultar cómodo para ir accediendo
00:02:52
a todos ellos a partir a través de la información de la decimos aquí es definimos primer parámetro
00:02:59
que sea el número de jugadores podemos inicializar a 4 cuando el enunciado nos propone que cuando
00:03:07
hay dos circunstancias de juego que se sale un poco de lo habitual una cuando hay errores en
00:03:16
los datos de entrada que dice bueno considera en ese caso el juego del mus que tiene esta
00:03:24
combinación 4 4 0 como si estuviéramos si no decimos nada es que vamos a jugar al mus y luego
00:03:29
la otra es que cuando sea 451 hay que añadir los dos comodines estas dos situaciones un poco
00:03:35
extras al juego más típico nos propone el enunciado entonces vamos a definir el número de jugadores
00:03:40
el número de cartas por jugador y static int y baraja el tipo de baraja que podrá ser 0 si
00:03:48
estamos suponiendo 0 para baraja española y 1 para baraja francesa estas inicializamos estos
00:04:02
valores porque son precisamente los que los que hay que considerar en el caso de que se metan
00:04:14
mal los atributos de entrada que sería el juego de hermoso bien pues nada otra cosa podemos definir
00:04:20
aquí son una serie de arrays con la información que tienen las barajas que
00:04:29
son precisamente las que el enunciado nos está proponiendo por aquí. Entonces nos
00:04:33
venimos y definimos unos arrays, static, arrays de strings, los palos que tiene la
00:04:40
baraja española, un array, recordamos que podemos dimensionarlos con un new y luego
00:04:52
ir dando valores y una de las alternativas también para dar el tamaño
00:04:58
a los arraís es a través de la inicialización entonces vamos a inicializar este con cuatro
00:05:02
valores que serán los horóscopos espadas y bastos los cuatro palos de la baraja española hacemos lo
00:05:09
mismo para la baraja francesa baraja francesa que son rombos corazones picas y tréboles y ahora
00:05:27
vamos a hacer lo mismo pero para las cartas en sí, en las cartas españolas
00:05:52
según el anuncio, tenemos el as
00:06:02
el 2 3
00:06:07
4 5 6 7 5
00:06:14
6 7
00:06:25
sota
00:06:30
caballo
00:06:34
en el caso de la baraja
00:06:35
francesa tenemos el 2 3 4 5 6 7 en este caso
00:06:57
tenemos números hasta el 10 8 9 y 10
00:07:06
8 9
00:07:11
10
00:07:13
luego J, Dama y Rey en lugar de Sota, caballo y rey
00:07:15
J, Dama y rey
00:07:21
no soy muy experto en las cartas, no juego mucho a las cartas, no sé si voy a meter la pata a la que vaya contándoos algo
00:07:25
y luego podemos definir un array más que podrían ser los comodines para la baraja francesa
00:07:36
tendría dos entradas, podríamos definir como comodín 1 o joker 1 y comodín 2
00:07:44
Bien, estas son todas las cartas que vamos a tener disponibles y el ejercicio, bueno, estamos en el tema de colecciones y de mapas.
00:07:56
¿Qué podemos elegir para...? Vamos a definir el mazo de cartas a través del cual vamos a ir utilizando luego para hacer el reparto en función de estas características de entrada.
00:08:11
En realidad, bueno, pues se trata de una... Desde luego no es un mapa porque no tenemos un índice y un dato relacionado el dato con el índice.
00:08:22
directamente son las cartas
00:08:31
las tenemos por aquí en cuando habéis hecho entrega de la práctica algunos habéis creado un objeto de carta está
00:08:33
correcto muy bien yo no lo voy a hacer así
00:08:39
alternativa diseño puede haber distintos y pueden ser todos correctos
00:08:43
nosotros cada carta la vamos a construir a través de
00:08:47
estrés que va a ser una combinación de el palo y el número
00:08:50
entonces pues podemos hacer no necesitamos un mapa vamos a
00:08:57
trabajar con una colección y luego tened en cuenta que vamos a barajar las cartas con lo
00:09:01
cual no nos interesa que tenga ningún orden. En este caso podemos tirar por una colección y quizás
00:09:07
la más sencilla. Vamos a definir para el mazo de cartas una ArrayList, por ejemplo,
00:09:13
de strings. Cada una de las cartas va a ser un string que va a ser una combinación entre el
00:09:20
palo y la carta para la baraja española y para la francesa su palo y la carta y luego habrá dos
00:09:27
cartas adicionales en caso de ser el juego del póker que serán los dos comodines, entonces definimos
00:09:33
el ArrayList, pues podemos definirlo como ArrayList mazo, aquí estamos definiendo un objeto de este
00:09:39
tipo, ArrayList de string, con lo cual ahora como hacemos habitualmente cuando hacemos una variable
00:09:48
y le podemos hacer un new y llamar a lo que sería el constructor.
00:09:53
No me compila porque tengo que importar el mazo
00:09:57
y lo importo desde Java útil.
00:10:01
Bueno, ya estamos con una definición de datos y en disposición de empezar
00:10:05
a trabajar en el main. ¿Qué es lo primero que vamos a hacer? Pues vamos a validar
00:10:09
los datos de entrada que nos llegan cuando ejecutamos el programa.
00:10:13
Los datos tienen que ser, como nos dice por aquí en el ejemplo, fijaros
00:10:17
bloques de tres en tres y de tipo numérico y luego esto respecto al formato tres datos numéricos y
00:10:21
luego funcionalmente podemos hacer alguna validación extra cuando vayamos avanzando con el código lo
00:10:29
vemos para hacer esta validación lo primero que podríamos hacer es decir mira vamos a comprobar
00:10:34
que el número de datos que me entran su longitud es mayor o igual que tres como poco necesito tres
00:10:39
si meto más de tres argumentos, vamos a entender que descartamos
00:10:51
a partir del tercero el resto, pues bueno, es información que no me interesa.
00:10:55
Si esto se da, en cuanto al número de argumentos, vamos
00:10:59
bien, estamos trabajando como corresponde.
00:11:03
Si se meten dos o un argumento en la
00:11:07
ejecución, luego hacemos ejecuciones con diferentes alternativas, pues estaremos
00:11:11
teniendo problemas porque no tendremos estos tres datos, entonces tendremos que considerar
00:11:15
esta como opción por defecto en el caso de que se metan los tres argumentos bien pues vamos a
00:11:19
cargar estos datos entonces cojo y digo que el número de jugadores lo cargo desde fijaros que
00:11:26
ese es un array de strings entonces con la clase con la clase wrapper integer cojo y lo hago un
00:11:33
parseInt a un string. ¿Dónde tenemos
00:11:42
un string? Pues como primer elemento de
00:11:47
este array. Su posición 0 la voy a
00:11:51
intentar cargar como número de jugadores, que por otra parte es como nos dice
00:11:55
que tiene que funcionar el enunciado. El número de cartas sería el segundo
00:12:02
de los apartados, el segundo de los atributos introducidos y el
00:12:06
tercero debe ser un 0 o un 1 si el dato es correcto
00:12:12
que nos indica el tipo de baraja, recordamos que 0 corresponde a la baraja española y 1 a la baraja francesa
00:12:16
vale, si hemos metido todos los datos bien, si resulta que tenemos 3 argumentos como poco y todos están metidos bien
00:12:25
por aquí vamos bien, ¿qué puede suceder? que a la hora de meter los 3 argumentos lo hayamos hecho correctamente
00:12:31
por ejemplo, decir 4 jugadores, 5 cartas por jugador, baraja francesa, pues muy bien
00:12:38
pero puede ser que realmente los datos hayamos metido aquí algo que no sea un número con lo
00:12:43
cual esto que nos provocará una excepción pues vamos a hacer un try catch de esto para garantizar
00:12:49
que tenemos recogida esa consideración hacemos un try capturamos una excepción catch vamos a
00:12:55
capturarla por ejemplo como una excepción general vamos a hacer diferenciación entre
00:13:11
diferentes tipos de excepciones. Recordad que podríamos hilar más fino
00:13:15
y hacer una aritmética excepción, que sería la que se daría en ese caso que ponía
00:13:19
como ejemplo. Vamos a hacer una excepción general. ¿Esto qué pasaría?
00:13:23
Si alguno de los tres parámetros que metemos al hacer el integer parseIn
00:13:27
ha resultado no ser un número, se provocaría excepción, que podría pasarnos
00:13:31
en esta línea, en esta o en esta. Entonces, ¿dónde se nos iría?
00:13:35
Aquí, a la parte de excepción. ¿Qué nos interesa en ese caso?
00:13:39
pues bueno, podemos considerar que continúa el programa ejecutándose con los valores
00:13:42
por defecto, como si hubiéramos metido un número de argumentos menor de 3.
00:13:46
Como alguno de los valores puede ser que se haya sobrescrito ya por aquí,
00:13:51
lo que podemos hacer es ahí volver a dar los valores de inicio
00:13:54
a estos tres. Entonces cogemos
00:13:58
y decimos que en caso de que se produzca una excepción porque alguno de los datos
00:14:02
durante este try haya sido erróneo, haya
00:14:06
nos haya provocado que casque el programa vuelvo a darle los valores que considero por defecto
00:14:09
bueno aquí podríamos poner si el número de él es correcto podemos poner un elsa aquí si queréis
00:14:16
para tenerlo constancia cuando hagamos pruebas un sistema o frente el n indicando que el número
00:14:27
de parámetros incorrecto
00:14:36
se consideran los valores
00:14:43
por defecto. Fijaros que aquí estamos
00:14:53
inicializando los valores por defecto, cosa que no estamos haciendo aquí. ¿Y por qué no lo hacemos?
00:14:56
Porque si el número de atributos no ha sido al menos 3
00:15:01
esto no se va a ejecutar, con lo cual no vamos a sobreescribir ninguno y sí que hemos
00:15:05
tenido la consideración de inicializarlos aquí allá al orden por defecto.
00:15:09
Con lo cual aquí en este no es necesario volver a dar esos valores.
00:15:13
En cambio aquí en el catch sí es necesario porque si el error se produce en el tipo de baraja,
00:15:17
estos dos parámetros sí que podrían haber modificado estas variables.
00:15:22
Entonces en este volvemos a meter los valores por defecto, en este no, no es necesario.
00:15:27
Y aquí, bueno, pues si queréis incluso para hacer una traza del programa
00:15:32
podríamos poner System of Println diciendo
00:15:37
que se ha producido un error en los
00:15:41
parámetros de entrada. Bien, llegado a este punto
00:15:48
consideramos estas tres variables
00:15:56
las tres variables con información
00:16:02
correcta. Bien, porque los hemos cargado
00:16:07
a través de unos datos correctos que hemos metido
00:16:11
bien, porque no hemos metido suficientes parámetros, pero se está considerando
00:16:14
el juego del Moose, como nos dice el enunciado, o si alguno de estos datos
00:16:18
ha sido correcto y ha producido un error, como lo hemos cogido con un try-catch
00:16:22
los estamos volviendo a poner aquí los de por defecto, con lo cual ahí tenemos
00:16:26
datos que ya nos resultan interesantes para poder trabajar
00:16:29
todavía se nos puede dar, esto es
00:16:34
en cuanto a tipo de formato, número de atributos, fijaros
00:16:38
sí que no hemos metido en alguno de los datos
00:16:41
de entrada al programa una cadena de caracteres, pero se puede dar la situación
00:16:45
de que hayamos metido datos del siguiente tipo
00:16:49
imaginaos que metimos 4 jugadores, 4 cartas y baraja la 5
00:16:53
¿qué sucede aquí? pues eso no te da ninguno de todos estos errores
00:16:57
los argumentos son al menos 3 y no se produce
00:17:00
un error, pero en cambio 5 nos va a saber gestionar el programa
00:17:05
digamos que tenemos aquí un error de tipo funcional o imaginaros que metemos aquí que
00:17:09
hay 10 jugadores y a cada jugador le damos 20 cartas de la baraja española pues 200 cartas
00:17:17
no va a tener la baraja española con lo cual tampoco se va a poder realizar la jugada entonces
00:17:22
podemos realizar por código una serie de validaciones para considerar estos escenarios
00:17:26
una vez llegados aquí pues podemos hacer una llamada a un método a un método que nos valide
00:17:31
esto ese método lo podemos considerar que bueno que nos devuelve un boolean
00:17:38
true verdadero si los datos son válidos y false si no lo son entonces
00:17:44
podríamos decir aquí a ver si creamos un método que sea
00:17:49
valida con minúsculas valida datos tenemos que desarrollar este método que
00:17:57
nos devuelve la true si es correcto y false si no lo es correcto entonces
00:18:07
devuelve, true, sí
00:18:11
son datos introducidos
00:18:16
válidos, false
00:18:21
sí, no lo son. Si los datos han sido
00:18:24
correctos, por aquí continuaremos con el resto del programa
00:18:33
y si no, podemos poner un else aquí
00:18:37
es decir, una vez que hemos valido estos datos, ahora hacemos el método, si no ha sido correcto
00:18:39
nos vendremos al else y en else
00:18:45
podemos decir si lo que vamos a validar
00:18:47
sobre todo van a ser las cartas
00:18:50
si hay suficientes cartas
00:18:53
para hacer el juego
00:18:54
podemos poner system out
00:18:55
.println
00:18:58
vamos a poner aquí por ejemplo
00:18:59
cartas
00:19:04
insuficientes
00:19:05
en la baraja
00:19:07
vamos a validar
00:19:10
antes de continuar
00:19:13
creamos este método, recordad que
00:19:15
esperamos que no
00:19:18
devuelva un boolean porque lo hemos metido aquí dentro de un if
00:19:20
entonces podemos hacer aquí un static
00:19:23
que devuelva un boolean, el nombre del método
00:19:26
y vamos a hacer el trabajo este, ponemos
00:19:32
por ejemplo boolean b
00:19:40
def, el valor devuelto, decimos que lo inicializamos a que sí
00:19:42
que va a ser correcto, si durante las comprobaciones vemos que
00:19:48
no lo es, ya nos preocuparemos de cambiarlo. Y hacemos un return
00:19:52
dbdef. Vamos a crear una variable, como hemos
00:19:55
dicho otras veces, para poner un único return en todo el método.
00:20:00
¿Qué es lo primero que podemos valorar? Pues recordad que los
00:20:06
datos que estamos recibiendo y que los tenemos ahora mismo cargados en estas
00:20:10
tres variables, durante este proceso que hemos hecho aquí,
00:20:13
una de las cosas que tiene es que la baraja tiene que ser
00:20:18
cero para que sea española, uno para que sea francesa, y si no son ninguno de esos
00:20:20
dos valores, pues el programa no dispone
00:20:24
de una baraja como para trabajar con ello. Entonces podemos
00:20:28
coger una primera comprobación que podemos hacer, es decir, que si
00:20:32
el tipo de baraja y baraja
00:20:35
que lo hemos cargado bien por aquí, probablemente
00:20:40
si el tipo de baraja es igual
00:20:43
a 0 o el tipo de baraja
00:20:52
es igual a 1, esos dos datos no os gustan.
00:20:56
Con lo cual sería una baraja válida. Pero
00:21:01
si no es ni 0 ni 1, si lo negamos, resulta que
00:21:04
ya no tenemos baraja disponible para el dato que hemos metido
00:21:08
como tercer parámetro y que se ha cargado aquí. En ese caso
00:21:12
¿qué podemos hacer? Bueno, pues podemos irnos a un valor por defecto como hemos hecho otras veces
00:21:16
y os parece decir que en ese caso vamos a considerar que la baraja es española.
00:21:20
Podríamos lanzar un error, decir, oye, la baraja no es correcta,
00:21:25
se acaba la aplicación porque tienes que seleccionar entre 0 y 1.
00:21:29
El enunciado no nos obliga a hacer nada en particular.
00:21:32
Bueno, pues vamos a tomar una decisión y vamos a decir que si la baraja introducida no es correcta,
00:21:35
consideramos baraja española.
00:21:40
En cambio, si la baraja ha sido correcta, la hemos metido bien,
00:21:46
pues vamos a validar otras cosas.
00:21:50
¿Qué otra cosa podemos validar? Pues que el número de jugadores multiplicado por el número de cartas por jugador sea mayor que las cartas disponibles en la baraja.
00:21:52
en este caso, ¿qué pasa? que no podemos jugar, ¿no?
00:22:12
si, como os decía antes, si tenemos 10 jugadores y a cada uno le pretendemos dar 40 cartas
00:22:16
y en la baraja tenemos 40 cartas, pues no disponemos de 400 para hacer el reparto
00:22:20
vale, pues vamos a hacer esa una vez que
00:22:26
bueno, esto lo podemos poner con un else
00:22:29
no, aquí no, esto es independiente, vale
00:22:35
bueno, lo que sí que, aquí lo que hemos hecho ha sido asegurarnos que la baraja es española
00:22:42
y ahora según sea la baraja española o sea francesa tenemos un número diferente de cartas
00:22:47
entonces podemos decir aquí que si la baraja con la que trabajamos es española
00:22:53
resultará que lo que podemos comprobar es que si el número de jugadores
00:22:59
por el número de cartas que tenemos en cada jugador
00:23:07
estos dos parámetros que hemos recibido de entrada
00:23:18
es mayor que el número de cartas de la baraja española
00:23:20
fijaros que estamos trabajando con la baraja española
00:23:27
para esto quizás nos interese
00:23:29
por trabajar con más cosas
00:23:32
podríamos poner aquí un 40 directamente
00:23:34
pero si queremos hacer un programa
00:23:36
un poco más, digamos, un poco más versátil
00:23:38
y tenerlo ahí un poco
00:23:40
más ordenado y todo, es el momento en el que
00:23:42
podríamos coger y definir aquí incluso
00:23:44
unas constantes de ese tipo
00:23:46
y así trabajamos con algo más
00:23:47
vamos a definir una constante
00:23:50
acordaros las constantes
00:23:51
le ponemos la etiqueta final
00:23:54
de tipo entero
00:23:56
y normalmente ponemos todo el nombre
00:23:57
de lo que sería la constante con mayúsculas, digamos un
00:24:01
compendio no obligatorio para que compile el programa, pero sí para
00:24:05
hacernos una idea de que esto estamos hablando de
00:24:09
una constante, que ya os digo se ha convertido en constante
00:24:12
porque no hemos metido la etiqueta final, entonces decimos que la baraja
00:24:17
española tiene un número de carotas de 40, la baraja
00:24:21
que son 10 por cada uno de los palos
00:24:25
la barja francesa, bueno pues tiene alguno más
00:24:29
la barja francesa tiene, son 10, 11, 12, 13
00:24:36
13 por 4 palos, pues son
00:24:40
13 por 4 palos, 13, 1, 2, 3, 4
00:24:44
5, 6, 7, 8, 9, 10, 11, 12, 13, 13 por 4
00:24:51
serían 59 cartas, 40, 4 por 3, 12
00:24:55
no, 52 cartas
00:25:02
4 por 52 cartas
00:25:04
sí, 44 por 312
00:25:07
yo creo que 52, sí
00:25:13
y luego sería
00:25:14
static
00:25:16
final int
00:25:17
podemos poner
00:25:20
la baraja francesa
00:25:22
con un número de cartas
00:25:24
cuando considera
00:25:27
también que tiene comodines
00:25:31
que en ese caso serían
00:25:33
2 más 54
00:25:35
serían las 52 anteriores más 2 que son estos dos comodines
00:25:36
con esta constante podemos coger y venirnos aquí y decir que
00:25:42
si resulta que la baraja, o sea el número de jugadores por el número de cartas
00:25:48
que pretendemos repartir es mayor que el número de cartas que tiene la baraja española
00:25:54
que lo hemos definido como 40, pues esto nos da mal resultado
00:25:59
Entonces, este validar datos, recordad que está haciendo un return de esta variable en caso de que sea correcto, lo tenemos inicializado a true, pero en este caso no, nos estamos encontrando en una situación de error, con lo cual indicamos que sea falso.
00:26:06
Ahora, esta es la comprobación que podemos hacer a este respecto con la baraja española. Si resulta que tenemos, que estamos trabajando con la baraja francesa, aquí tened en cuenta que solamente puede ser 0-1 porque después de todas las validaciones, Ibaraja tendría con toda seguridad un número. Si el dato es correcto, un 0-1-1 será el que sea y si no, lo hemos inicializado a 0, con lo cual haría esta comprobación.
00:26:20
si en cambio y baraja viene con valor 1
00:26:47
es decir, queremos trabajar con la baraja francesa
00:26:50
pues tendremos que hacer dos comprobaciones
00:26:53
a diferencia de lo que hemos hecho con la baraja española
00:26:56
que era el número de cartas en sí
00:26:59
que será si el número de cartas es la francesa
00:27:01
o estamos trabajando con el número de cartas relacionados con el comodín
00:27:04
entonces tenemos que hacer esta distensión aquí
00:27:08
y decimos sí
00:27:12
resulta que el número de jugadores resulta que es igual a 4
00:27:13
y el número de cartas que se reparten es igual a 5
00:27:24
en ese caso estamos hablando de que van a jugar al póker
00:27:40
y el póker es el que incluye los dos comodines
00:27:44
entonces como incluye los dos comodines
00:27:48
la comprobación que haremos aquí
00:27:50
es que el número de cartas por el número de jugadores en este caso es cuando es póker considerando los comodines
00:27:52
no podrá ser en ningún caso mayor de esta constante que es las cartas disponibles en la baraja cuando trabajemos con comodines
00:28:01
tened en cuenta que es cuatro jugadores con cinco cartas y estamos entrando por el else que nos obliga a que sea baraja francesa
00:28:10
Es decir, con toda seguridad estamos tratando el tema del juego del póker.
00:28:21
Y en este otro caso, baraja francesa no es el juego del póker,
00:28:29
el número de jugadores por el número de cartas, tendrá que considerar un máximo de cartas
00:28:35
de la baraja francesa pero sin comodines, que sería este otro.
00:28:39
Y de nuevo damos el FALSE.
00:28:43
Entonces, la situación de este método es, si la baraja que se ha indicado no es ni francesa ni española, indicamos que es a la española, aquí tenemos un criterio de decir, bueno, vamos a utilizar un valor por defecto, y en cambio, si el número de cartas es incorrecto, no hay suficientes cartas, aquí no utilizamos valor por defecto.
00:28:50
Lo que vamos a hacer va a ser devolver un false para que el programa nos envíe un mensaje y finalice.
00:29:10
Si la baraja era española, validamos el número de cartas que hay que repartir respecto a la constante de cartas que tiene la baraja española.
00:29:16
Y si no, si es francesa, respecto a la francesa, con el matiz de si estamos jugando al póker, consideramos dos cartas más.
00:29:24
vale, pues resulta que si el número de cartas no es válido
00:29:31
esto devuelve un false, se viene por el else, nos dirá el número de cartas insuficiente
00:29:38
y se termina el programa, llegados a este punto
00:29:42
hay cartas suficientes para repartirlo y tenemos aquí datos
00:29:45
que nos resultan válidos para poder trabajar con ello
00:29:50
entonces, ¿qué podemos hacer?
00:29:55
podemos decir, mira, el juego puede ir por dos lados
00:29:59
por la baraja española o por la baraja
00:30:02
francesa. Entonces decimos
00:30:04
if baraja es
00:30:06
igual a cero, baraja
00:30:08
española.
00:30:13
Else,
00:30:19
vamos a la baraja francesa.
00:30:20
Para la baraja
00:30:23
española lo que vamos a hacer
00:30:25
es, considerando
00:30:26
los datos de la baraja española,
00:30:28
cargarlas
00:30:32
en el mazo de juego.
00:30:32
Y de la misma forma, cuando sea la
00:30:34
francesa, con
00:30:36
los datos de la baraja francesa cargarlos en el mazo con el matiz además de incluir esto si se
00:30:38
trata del póker para hacer un poquito más ordenadito si os parece creamos un método en
00:30:45
lugar de ponerlo aquí entonces podemos aquí cargar espanola un método y aquí podemos poner cargar
00:30:52
francesa
00:31:02
ahora vamos a crear estos métodos
00:31:07
creamos el método
00:31:09
y vamos a cargar la baraja española
00:31:18
cargar la baraja española
00:31:27
publicitatis
00:31:36
void
00:31:38
implica
00:31:40
que considerando estos palos
00:31:42
y estas cartas
00:31:44
tenemos que añadir una carta
00:31:46
de cada uno de ellos al mazo
00:31:48
voy a copiar esto
00:31:50
para aprovechar y hacer
00:31:54
y hacer copia y pega ahora ahora borro simplemente es para traerme los datos
00:31:56
aquí no tener que estar yendo para arriba para abajo me interesa esto
00:32:01
y ahora después lo borro así lo tengo aquí a mano para poder trabajar con ello
00:32:12
en el mazo quiero añadir cada una de las cartas tenemos que añadir un as un 2 un
00:32:16
3 una sota un caballo un rey para cada uno de estos palos entonces lo que
00:32:21
hacemos es crear vamos a hacer vamos a recorrer estos
00:32:26
a raíz fijaros que estos hemos trabajado en esta
00:32:31
parte con estructuras de datos tipo array y
00:32:36
para crear más hemos utilizado una colección esto podrían ser colecciones
00:32:45
también y ahora acceder a ellos a través de colecciones
00:32:48
o sea que alternativas en realidad tenemos muchas decimos for
00:32:52
Hacemos int i igual a cero, mientras i sea menor que el número de palos que tenemos en la baraja española, hacemos un i más más.
00:32:57
Esto lo que hace es un bucle por cada uno de los palos y por cada uno de los palos queremos recorrer las cartas.
00:33:23
Entonces cogemos y hacemos dentro de este for, otro for, for int j igual a cero, mientras j sea menor que el número de cartas que tiene cada uno de los palos, a ver, s, cal, es, punto, no me ofrece, vale, porque tenía ahí un error, hago un j más más, entonces este bug le ha anidado como se entiende, para cada uno de los palos,
00:33:32
una ejecución de este for, que será cada una de las cartas que tiene que haber
00:34:10
en cada uno de los palos. Y lo que me interesa es meter
00:34:16
en el mazo, que como es una colección, utilizamos el método
00:34:20
ADD, y fijaros, carga un string, y este string lo vamos a construir
00:34:24
a partir de la información de los dos
00:34:28
de los dos array. Entonces, cogemos y decimos, ese car
00:34:31
es posición J
00:34:37
esto me dirá as 2 3 4 5 6 7 sota caballo y rey más dejamos aquí un espacio decimos de y ahora
00:34:41
decimos el palo decimos ese palo y pues en cada una de estas veces dirá para el as de
00:34:53
oros, copas, espadas, bastos
00:35:11
luego la siguiente vuelta de este foro dirá
00:35:15
el 2 de oros, el 3 de oros
00:35:17
el 4 de oros, cuando acabemos con el rey
00:35:21
habrá recorrido todo este bucle
00:35:24
se vendrá aquí y se irá al siguiente bucle
00:35:26
al siguiente valor del bucle más general
00:35:29
con lo cual nos iremos a copas, empezaremos por el ar de copas
00:35:32
2 de copas y todos ellos vamos haciendo
00:35:35
vamos añadiendonos aquí al mazo
00:35:38
Bueno, aquí ya tenemos cargado ahora en el mazo la baraja española. En el caso de que sea la baraja francesa, pues vamos a hacer algo parecido, tan parecido que va a ser prácticamente lo mismo, pero con los otros valores.
00:35:40
entonces cogemos
00:35:57
static, pull it
00:35:59
void
00:36:02
cargar la baraja
00:36:03
francesa, voy a volver a
00:36:06
coger aquí, ahora después lo borro
00:36:10
ahora los palos que me interesan son los
00:36:12
de la francesa, las cartas de la francesa
00:36:21
y vamos a considerar el comodín también
00:36:23
cuando el juego sea
00:36:25
poker
00:36:28
entonces para la francesa lo que vamos a hacer
00:36:29
va a ser un recorrido
00:36:32
parecido
00:36:34
vamos a hacer copia y pega de este for
00:36:36
el mazo de cartas
00:36:39
sobre el que vamos a trabajar
00:36:42
va a seguir siendo mismo
00:36:43
entonces el palo, decimos
00:36:45
para el palo de la baraja
00:36:46
recorriendo los palos de la baraja francesa
00:36:48
vamos a coger las cartas de la baraja
00:36:53
francesa
00:36:55
entonces tenemos aquí la carta de la baraja francesa
00:36:56
palo de la baraja francesa
00:36:59
ya está, es exactamente la misma
00:37:01
jugada que antes
00:37:03
lo único que ahora hemos cargado
00:37:04
para los palos y las cartas de la baraja francesa y nos queda tener en consideración si el juego es
00:37:06
póker para meter los comodines sea póker o sea cualquier otro todos los cartas de la baraja
00:37:13
francesa tienen que entrar y solamente en el caso de ser póker es cuando tenemos que meter los
00:37:21
comodines y cuando eran los comodines pues cuando jugaban cuatro jugadores con cinco cartas vamos a
00:37:27
en esa comprobación decimos sí y no jugó y no jugó si es igual a 4 el número
00:37:32
de cartas es igual a 5 estamos hablando de póker
00:37:59
debemos incluir comodines y en este caso lo que tenemos que hacer es añadir al
00:38:13
mazo los dos comodines y los dos comodines los tenemos fijaros en este otro array a ver no está
00:38:25
aquí bueno son dos posiciones aquí podríamos hacer un bucle como son sólo dos pues si queréis
00:38:36
vamos a ponerla directamente la instrucción que meta el elemento 1 el elemento el primer elemento
00:38:44
que está en la posición 0 de la del índice y el segundo de los comodines que está en la posición
00:38:52
Y aquí ya tendríamos el mazo cargado en el caso de que sea la baraja francesa con las cartas francesas, incluyendo los comodines en caso de que sea póker.
00:38:58
Entonces si volvemos aquí al main, asegurándonos que se han validado los datos, si la baraja es la española cargamos española y si es francesa cargamos la francesa.
00:39:10
Aquí ya tenemos el mazo cargado con lo que haya correspondido según la información que hayamos ido metiendo.
00:39:20
¿Y ahora qué queda hacer? Yo creo que tenemos que hacer el reparto de cartas.
00:39:33
Antes de hacer el reparto de cartas podemos barajarlas.
00:39:37
Ya tenemos la baraja en nuestras manos, vamos a barajarlas un poco las cartas.
00:39:41
entonces lo que podemos hacer para barajarlas es utilizar no sé si recordáis que la clase
00:39:46
colección colección tiene un método que es el método sáfer
00:39:53
como era esto lo que hace es mezclar las cartas de que de una lista tenemos un array list que
00:40:00
cuelga que hereda de lista pues nos vale del array mazo pues aquí ya hemos barajado las cartas
00:40:12
En cada una de las ejecuciones se mezclarán de forma aleatoria las cartas mediante este método estático, Shuffle, que tenemos disponible en la clase Collections en nuestras librerías de Java.
00:40:20
Y ahora vamos a hacer el reparto de cartas. Podemos utilizar, ya que lo estamos haciendo bastante modular, un método que sea el método repartir cartas.
00:40:33
ahora vamos a hacer el método repartir cartas
00:40:42
vamos a desarrollarlo
00:40:48
static
00:40:49
public boy
00:40:56
podría ser privado porque realmente
00:41:02
todo está en una clase
00:41:05
pero bueno, método repartir
00:41:06
cartas
00:41:09
y entonces ahora lo que vamos a hacer va a ser
00:41:10
para cada uno de los jugadores
00:41:19
coger 5 cartas
00:41:21
de la baraja
00:41:23
en realidad
00:41:26
podríamos alternar y darle una carta
00:41:27
a cada uno de los jugadores
00:41:30
una a otra a otra, o podemos darle las cartas que correspondan
00:41:31
al jugador que toque en particular, vamos a hacerlo de esta segunda forma
00:41:35
y si no sería, para cambiarlo y ir dando carta a carta
00:41:39
sería hacer el for que está dentro fuera y el que está de fuera dentro
00:41:44
decimos inti, mientras i sea
00:41:48
menor que el número de jugadores, el número de jugadores que están
00:41:55
participando justo en esta partida, la tenemos en esta variable
00:41:59
hacemos un y más más y esto es el recorrido por cada uno de los jugadores
00:42:02
entonces podemos poner aquí un sistema para indicar que vamos a darle las
00:42:14
cartas a uno de los jugadores podemos poner aquí barra en y vamos a dar un
00:42:18
espacio vamos a dar un tabulador y decimos jugador más
00:42:30
vamos a recorrer todos los jugadores con las posiciones en los array 0 1 2 y 3
00:42:39
pero para el mensaje nos interesa que aparezca 1, 2, 3 y 4
00:42:45
jugador 1, jugador 0, queda un poco más feo
00:42:48
entonces podemos poner aquí 1 y más 1 para que nos muestre
00:42:51
vamos a poner aquí también para que nos quede un poquito más bonito
00:42:54
luego el dibujo, unos cuantos asteriscos
00:43:02
luego vemos cuánto nos hace falta
00:43:04
entonces para cada uno de los jugadores se dirá jugador 1
00:43:06
y a cada uno de los jugadores le queremos dar una serie de cartas
00:43:12
que es el inum cartas
00:43:16
Entonces, ¿qué tenemos? Para cada jugador, otro bucle aquí, decimos for j igual a cero, mientras j sea menor, en este caso, que la longitud, que el número de cartas que tiene cada uno de los jugadores, a ver, algo estoy haciendo mal, vale, tengo que decirle que esto es un int, mientras j sea menor que, esto está mal escrito, punto,
00:43:17
Ah, no, es que he puesto número de cartas y no un cartas, ya está, mientras sea menor que el número de cartas, esto no es un array, no tengo que poner .length, correcto, J++.
00:43:58
Y ahora lo que hacemos en este caso es, pues nada, darle, repartir las cartas, ¿qué hacemos? Cogemos una carta, la primera que tenemos disponible del mazo,
00:44:14
Como no queremos que la misma carta se vea diferente, lo que haremos será un remove. El método remove de un ArrayList nos devuelve el elemento y una vez devuelto el elemento lo elimina de la lista.
00:44:26
entonces podemos aprovechar y sacarlo por pantalla si queréis aquí, system.auth.println
00:44:40
vamos a poner aquí un barra T para hacer una tabulación y que se quede tabulado junto a lo del jugador
00:44:46
y cogemos una carta del mazo, que ya la habíamos llamado rlmazo
00:44:59
y hacemos un remove, fijaros un remove nos va a pedir que indiquemos que carta del índice de todas las relays
00:45:16
que queremos rescatar y nos va a devolver
00:45:23
un string con la carta que estamos recuperando
00:45:25
como el remove
00:45:27
cada vez que cogemos una carta
00:45:29
nos la quita ya el mazo, pues vamos a coger
00:45:31
siempre la que está arriba del todo
00:45:33
entonces decimos que nos quite 0
00:45:34
nos devuelve el string
00:45:36
como es remove, lo quita de la lista
00:45:38
y al estarlo devolviendo nos lo estará mostrando
00:45:40
el system of printl
00:45:43
y ya está, yo creo hecho el reparto de cartas
00:45:44
cada uno de los jugadores
00:45:53
nos dirá jugador 1
00:45:55
jugador 2, jugador 3 y luego hacemos
00:45:57
una vuelta quitamos tantas cartas como tengamos aquí en el ningún cartas para cada uno de los
00:45:59
jugadores y lo mostramos por pantalla no sé si no estoy seguro que sea el formato que nos está
00:46:05
pidiendo el enunciado pero bueno en cualquier caso sería cuestión de dar formato diferente al
00:46:10
sistema sprint el n a la hora de sacarlo por pantalla y bueno y fijaros una repartida las
00:46:15
cartas aquí si queréis incluso para que nos quede todo más cerradito ahora hacemos ejecuciones y
00:46:24
probamos. Ya os he comentado
00:46:30
otras veces que es mejor ir
00:46:32
haciendo pruebas parciales del código
00:46:34
y no meter todo el código como estoy haciendo yo
00:46:36
y luego querer probar
00:46:38
porque si hay errores es más difícil encontrarlos
00:46:40
con mucho código que si lo vamos haciendo poco
00:46:42
a poco. Así que lo que
00:46:44
he hecho yo
00:46:46
no lo cojáis como práctica habitual
00:46:46
y mejor ir haciendo pruebas, ir
00:46:50
probando el programa
00:46:52
cada cosita que vayáis haciendo.
00:46:53
Lo que se me ocurría, lo que os proponía
00:46:57
que podíamos hacer ahora es
00:46:59
indicar cuántas cartas han quedado sin repartir si queréis esto lo podemos
00:47:01
poner aquí diciendo system.out.println ya una vez hecho ya el reparto
00:47:06
cuántas cartas han quedado sin repartir pues aquí podemos poner un mensajito
00:47:14
diciendo vamos a meter alguna linta más vamos a poner un barra t que estamos
00:47:19
está volando todo y decimos han quedado más y el número de cartas que han quedado en el mazo
00:47:24
están son las que hay aquí la gente había sin repartir decimos al punto y las podemos utilizar
00:47:35
el método side que dice el tamaño que tiene el mazo ahora teniendo en cuenta que saben con los
00:47:44
remus se han ido descontando cartas ya y aquí podemos poner cartas sin repartir y bueno con
00:47:50
esto yo creo que tendríamos el ejercicio razonablemente resuelto vamos a probar vamos
00:48:02
a hacer una primera ejecución así sin meter ningún parámetro como no hemos metido parámetros se
00:48:08
entiende que ha hecho la ejecución por defecto no dice el número de parámetros incorrectos no
00:48:17
hemos metido ninguno, se consideran valores por defecto, los valores por defecto
00:48:23
es el juego del Moose, dice el jugador 1, 2, 3, 4 jugadores, 4 cartas
00:48:27
por jugador y cartas y baraja española
00:48:31
así a simple vista, no veo, no me parece que se repitan
00:48:34
con lo cual sí que se ha cargado bien la lista porque nos ha dado cartas
00:48:39
de la baraja española y el remove ha ido funcionando porque
00:48:43
han desaparecido, o sea no parece que haya repetidos
00:48:46
Y luego, bueno, fijaros, 40 cartas que tiene la barra española, menos una, menos, ¿cuántas hemos repartido? 4 menos 16, pues 16 más 24 nos vamos a las 40.
00:48:50
Vamos a hacer algunas ejecuciones con otros datos, mirad, nos venimos aquí para meter datos en Eclipse, nos iríamos aquí a Run, Run Configuration, en Eclipse y nos venimos aquí a Arguments.
00:49:04
Entonces vamos a meter, por ejemplo, primero una con dos atributos que no llega a tres, para comprobar una de las validaciones. Hacemos ejecución, nos dice número de parámetros incorrectos, se consideran los valores por defecto y volvemos a tener una jugada de Moose, cuatro jugadores con cuatro cartas.
00:49:17
Vamos a poner un atributo diferente, vamos a poner que este, no sé para qué validar el try-catch que pusimos a la hora de considerar los argumentos de entrada, aquí en lugar de un número ponemos una cadena de texto, entonces cogemos y dice error en los parámetros de entrada, que es el mensaje que hemos puesto en el catch, poníamos los valores por defecto, volvemos a tener cuatro jugadores y juego del Moose.
00:49:35
Vale, pues nos venimos a RAN Configuration por aquí de nuevo y ahora vamos a poner que haya tres jugadores a tres cartas cada uno en este juego y baraja española.
00:50:02
Pues vale, tres jugadores, baraja española, cada uno con tres cartas.
00:50:19
Como se han repartido nueve cartas, pues dice que nos quedan por repartir treinta y una.
00:50:24
Vamos a hacer una prueba con la baraja francesa, 331 por ejemplo.
00:50:27
dice, bueno, pues tres jugadores, efectivamente tenemos ahora cartas de la baraja francesa y habíamos dicho que había 52 cartas, verdad, creo recordar, habíamos echado el cálculo, a ver, aquí en el código, en la constante, habíamos considerado que cuando no metíamos los comodinios había 52 cartas, como se han repartido 9, pues nos quedan 43 por repartir y no parece que haya repetidos, pues nada, la jugada parece que sigue bien.
00:50:38
y si ponemos 4-5-1 que era el juego típico del póker
00:51:08
en ese caso, damos aquí a la ejecución
00:51:15
para el juego del póker tenemos 54 cartas en total
00:51:17
resulta que hemos repartido a 4 jugadores 5
00:51:24
pues serían 20 cartas repartidas y dice que nos quedan 34
00:51:28
así que parece que sí que ha tenido en consideración lo de meter los comodines
00:51:32
y no sé si ha caído en esta vez, no parece que haya caído en ningún comodín, vamos a hacer un par de ejecuciones
00:51:36
a ver si sale en alguno de los comodines, en alguna, mirad, aquí resulta que ha tenido suerte el jugador 4 y le ha tocado el comodín
00:51:42
y bueno, y poca cosa más, simplemente vamos a aprovechar que estamos hablando de los parámetros y os voy a enseñar a ver si nos funciona bien
00:51:50
desde Eclipse hemos visto que los parámetros en el proceso de ejecución
00:52:02
los metemos aquí a través de Run Configuration Arguments
00:52:06
pero la idea de esto es que el programa cuando estén en un entorno
00:52:10
de trabajo sin IDES, pues lo podamos
00:52:14
configurar para que haga el reparto que corresponda. Entonces si nos vamos
00:52:18
aquí al Workspace, hemos llamado Tarea 10
00:52:22
al proyecto, nos venimos a los binarios y aquí
00:52:29
tenemos el punto class con el base code del programa con el que estamos trabajando entonces
00:52:36
si ahora ponemos aquí llamamos al intérprete de java 9 y le pasamos aquí los parámetros vamos a
00:52:40
hacer una ejecución sin pasar de parámetros pues fijaros que nos ha hecho un reparto de la baraja
00:52:47
española y nos dice el número de parámetros incorrecto si ahora cogemos y le decimos pues
00:52:53
mira quiero tres jugadores que tenga cada uno dos cartas de la baraja francesa veis cómo metemos
00:52:59
desde el terminal cuando hacemos una ejecución
00:53:05
sin entorno de desarrollo los parámetros
00:53:08
que luego se cargan en el método main
00:53:10
en el array arc S
00:53:12
pues tres jugadores
00:53:14
uno, dos, tres, dos cartas
00:53:16
baraja francesa
00:53:18
pues aquí tenéis la ejecución
00:53:20
quería enseñaros esto desde el terminal
00:53:21
para que vierais como podemos
00:53:24
parametrizar nuestro programa a través
00:53:26
del array arc S
00:53:28
de esta forma si entregamos este punto
00:53:29
class a un cliente que nos lo haya solicitado
00:53:32
puede hacer diferentes ejecuciones sin necesidad de si vamos a repartir con una o con otra, hacer nuevas compilaciones del programa.
00:53:34
El mismo programa, considerando los métodos recibidos por ARS, tiene comportamientos diferentes, en este caso, en tanto en cuanto seleccionamos una baraja, el número de jugadores y el número de cartas.
00:53:42
Con esto yo creo que queda razonablemente resuelto la tarea. Espero que os resulte útil. Paro ya la grabación y nos vemos el siguiente lunes si no tenemos ningún percance. Esperemos que no. Venga, que tengáis buen puente. Hasta luego. Un saludo.
00:53:54
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Autor/es:
- JM
- Subido por:
- Jose Manuel M.
- Licencia:
- Dominio público
- Visualizaciones:
- 33
- Fecha:
- 30 de abril de 2025 - 12:11
- Visibilidad:
- Clave
- Centro:
- IES ALONSO DE AVELLANEDA
- Duración:
- 54′ 13″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 120.14 MBytes