Saltar navegación

2025-02-17-Programacion - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 17 de febrero de 2025 por Jose Manuel M.

18 visualizaciones

Tarea tema 6

Descargar la transcripción

¿Alguna preguntilla tenéis preparada para hacerme antes de arrancar a contar cosas nuevas? 00:00:02
Si tenéis alguna duda por ahí del tema 7, que es el que tenemos abierto o de alguno anterior, 00:00:10
bueno, si no me decís nada, pues había pensado hoy, como solemos hacer, en resolver, 00:00:22
ya que la semana pasada no pudimos la tarea del tema 6, lo hacemos un poquillo rápido 00:00:29
y luego bueno pues hacemos alguna otra cosita por ahí adicional 00:00:34
tema 7 no tengo ahora mismo no me acuerdo exactamente en qué momento termina 00:00:38
a ver si termina el día 3 todavía nos quedan unas cuantas semanas 00:00:42
para luego hablar de algunas cosas del tema 7 00:00:47
dedicar alguna tutoría entonces hoy trabajamos ya os digo sobre la tarea del tema 6 00:00:52
y alguna otra cosita por ahí que hablemos y la semana que viene 00:00:57
la dedicamos a hacer repaso 00:01:02
de los conceptos que hay en el tema 7 00:01:04
y así con una semanita más 00:01:06
pues tenéis oportunidad de echar un ojo 00:01:08
a los contenidos 00:01:10
me escucháis bien verdad 00:01:11
luego confirmarme por ahí 00:01:13
si vale 00:01:15
perfecto 00:01:17
bueno pues nada la práctica 00:01:19
esta de la tarea de la cocina 00:01:22
tenéis ya como siempre 00:01:24
una solución 00:01:25
puesta en el aula 00:01:28
virtual disponible 00:01:30
y vamos un poco despacito como solemos hacer 00:01:31
repasando los conceptos a hacer el ejercicio. 00:01:35
Básicamente es una segunda versión 00:01:39
de precisamente este ejercicio que hicimos ya en su momento 00:01:43
antes de haber trabajado con Arrays y aquí básicamente lo que aporta 00:01:47
es un poquito el trabajar eso con Arrays porque a la hora de 00:01:51
estamos considerando una única cocina en el ejercicio 00:01:55
pero estamos teniendo en cuenta que esa cocina podría tener 00:01:58
una serie de frigoríficos y una serie de placas 00:02:02
cuando en el ejercicio anterior decíamos que 00:02:06
teníamos la posibilidad de que hubiera un único frigorífico y una única placa 00:02:10
en este caso una cocina podría disponer de cero o varios frigoríficos 00:02:14
y de cero o varias placas, es un poco lo que nos aporta 00:02:19
de nuevo, entonces el método este que proponemos 00:02:22
para la clase cocina, lo que hace es que una vez recogida 00:02:26
la información de nombre de la cocina, los frigoríficos 00:02:30
y placas que puedan existir, pues nos saca 00:02:34
un mensajito informándonos de si hay cocinas 00:02:37
de qué marcas son y si hay placas de qué colores. 00:02:42
Vamos a ponernos manos a la obra. 00:02:47
Entonces vamos a crear un proyecto que podemos llamar 00:02:50
cocina y la clase 00:02:57
y el proyecto este está formado 00:03:08
por tres 00:03:10
clases según propone el 00:03:12
enunciado. Algunos 00:03:14
no es mal criterio cuando 00:03:16
hacéis las prácticas, dedicáis 00:03:18
una clase para el main 00:03:20
y ahí es donde 00:03:22
incorporáis una cuarta clase 00:03:24
una clase que digamos principal 00:03:26
que la consideréis como inicio del programa 00:03:28
y ahí estanciáis la cocina y luego la cocina 00:03:30
empieza a tener información 00:03:32
Bueno, yo según lo proponía en el enunciado, como está en el enunciado así lo desarrollamos, la misma clase cocina es la que tiene el main. Bueno, si suponemos que pudiese haber más de una cocina, pues igual sería buena cosa que el main estuviera en una clase diferente. 00:03:34
por ejemplo podría ser cadena de comercios o lo que sea 00:03:52
o cadena de restaurantes y ahí podríamos a su vez 00:03:57
volver a tener un array por ejemplo de cocinas para que esa 00:04:00
cadena tuviese una o varias cocinas y cada una de esas cocinas 00:04:04
tuviera la oportunidad de tener uno o varios frigoríficos y una o varias placas 00:04:09
Bueno, no hemos sido tan ambiciosos en este ejercicio 00:04:12
entonces vamos a crear las clases, la clase cocina 00:04:16
vamos a crear la clase frigorífico 00:04:20
vamos a crear las tres clases, luego vamos metiendo 00:04:27
código y la clase 00:04:30
placa. La clase frigorífico y la clase placa 00:04:35
no veo que tengamos por aquí justo el ejercicio 00:04:45
hecho anterior, aunque sí que hicimos la práctica 00:04:48
bueno, pues en realidad no han cambiado 00:04:51
mucho del ejercicio anterior 00:04:54
la idea es que la placa pues tenga una marca 00:04:55
como vamos a crear un setter y un 00:04:59
y un getter, pues la podemos definir 00:05:02
esa marca como privada, 00:05:04
private, la marca es 00:05:06
un string, bueno, pues ese marca. 00:05:08
Y luego, 00:05:12
pues tiene su getter y su setter, 00:05:13
que lo podríamos escribir o podemos 00:05:14
intentar aprovechar 00:05:16
el id para que no los genere. 00:05:17
Vamos a buscar por aquí, 00:05:21
generar getters y setters, 00:05:23
nos da aquí el id de la opción, si no lo podríamos 00:05:25
escribir claro a mano, digamos que 00:05:26
para el atributo ese marca, 00:05:28
decimos que los genere, 00:05:30
Y bueno, pues ahí están. La clase frigorífico creo que no tenía mucho más que esto. El acceso a la marca solo se puede hacer desde la propia clase, al haberlo definido como privado, entonces tendremos que acceder a la marca a través de estos dos métodos que en este caso son públicos, con lo cual tendrían visibilidad desde cualquier parte del proyecto, aunque hubiese diferentes paquetes, no sería necesario ni siquiera definirlos como públicos. 00:05:32
si lo definiésemos sin ningún indicador, recordad que esto implica que la visibilidad es visibilidad de paquete 00:06:00
y como todo el código lo tenemos en el mismo paquete, sería igualmente válido. 00:06:07
Vamos a ponerlo público, que es como nos lo ha generado, pero podríamos ser un poquito más restrictivos 00:06:12
si nos seguiría funcionando el programa de igual forma. 00:06:17
Y por otra parte la placa tenía un atributo, vamos a definirlo también private, 00:06:22
para que su acceso sea único y exclusivamente desde esta clase 00:06:29
en el cual identificamos el color. 00:06:33
Vamos a definir un setter y un getter, pero en lugar de 00:06:44
llamar al setter desde por ahí fuera, lo que vamos a hacer va a ser llamarlo 00:06:47
de forma interna también. Entonces vamos a crear los getter y los setter 00:06:51
como antes, vamos a aprovecharnos del IDE, decimos que nos genere el getter 00:06:55
y el setter, y en realidad el color 00:07:01
se lo vamos a asignar en este ejercicio de forma automática 00:07:04
desde el constructor entre tres posibles 00:07:09
que de forma probabilística tenga cualquiera de los tres valores 00:07:11
por igual. Entonces fijaros como este setColor 00:07:17
lo vamos a aprovechar el constructor de la clase placa 00:07:20
para llamarlo y que asigne el color y el constructor está en la propia clase 00:07:24
podríamos incluso este setColor en este ejercicio también ponerlo como private 00:07:28
porque en realidad no vamos a acceder a este método desde fuera de esta clase 00:07:32
podríamos ponerlo, vamos a mantenerlo, aunque en público un getter y un setter 00:07:39
típicamente, pues bueno, que tengan visibilidad pública no es una cosa 00:07:43
para nada descabellada, ¿vale? Entonces ponemos 00:07:47
el constructor para cuando creemos una nueva clase, vamos a definir 00:07:51
el constructor como public, recordad que los constructores no devuelven nada 00:07:55
pero nos indica, al contrario que el resto de los métodos 00:07:59
Los constructores se tienen que llamar de la misma forma que la clase, con lo cual, respecto a esos convenios que tenemos a la hora de nombrar a los constructores, hacemos una pequeña excepción porque típicamente los métodos, tenemos el convenio, el acuerdo de que empiecen con minúsculas, las clases con mayúsculas, el constructor, recordad que no deja de ser un método. 00:08:03
Entonces, para seguir el convenio tendría que ser minúscula, pero como se tiene que llamar como la clase, tenemos que romper una de las dos reglas. 00:08:25
Entonces mantenemos la P mayúscula para el constructor y aquí lo que vamos a hacer va a ser cuando construyamos una nueva placa, 00:08:33
hagamos el new y llamamos al constructor, lo que vamos a hacer va a ser aprovechar este momento para asignar ya un color 00:08:42
y como queremos hacerlo entre tres que tengan un valor aleatorio, hay diferentes formas para hacerlo. 00:08:49
la que yo os proponía en el ejercicio 00:08:57
pues era definir aquí un par de constantes 00:09:01
que fueran a un tercio y a dos tercios 00:09:03
entonces si luego con una función 00:09:06
aleatoria obtenemos un valor 00:09:09
que va entre 0 y 1, pues entre 0,3 00:09:12
periodo, consideraríamos uno de los 00:09:16
tres posibles valores, si esa función random 00:09:19
nos da un valor entre 0 y 0,3 00:09:22
periodo, si va entre 0,3 periodo y 0,6 periodo, pues 00:09:25
consideraríamos el segundo color y entre 0,6 hasta completar 00:09:29
el 1, pues consideraríamos el tercero. De alguna forma ahí conseguimos 00:09:33
que los tres colores tengan los mismos valores. 00:09:37
Entonces, ¿cómo podemos hacer eso? Pues aquí lo que hacemos en el 00:09:41
constructor es llamar al método setColor. En realidad, 00:09:45
no vamos a llamar al método setColor 00:09:54
como clásicamente se hace en los setters 00:09:58
pasándole el valor, sino que lo que vamos a hacer va a ser dentro del setColor 00:10:02
utilizar el método random, con lo cual este setColor, vamos a modificarlo 00:10:05
así un poquito, vamos a decir que no reciba nada 00:10:10
y aquí lo que vamos a hacer va a ser precisamente hacer ese cálculo 00:10:12
entonces, utilizando de la librería 00:10:18
de Java Math, el método 00:10:22
random, este método fijaros que es un método 00:10:25
disponible en la clase mat, no hemos instanciado ningún objeto 00:10:32
de la clase mat, por lo que entendemos que esto se 00:10:36
tratará de un método estático, porque lo podemos llamar con el nombre de la clase 00:10:39
punto nombre del método, en la librería donde esté definido su código 00:10:43
se lo habrán trabajado de forma estática 00:10:48
y este método nos devuelve un valor entre 00:10:51
devuelve un valor entre 0 y 1, en principio pues con el mismo porcentaje de posibilidades 00:10:58
y el valor que devuelve, mirad si ponemos de nuevo aquí math.random, fijaros que lo que 00:11:08
devuelve aquí nos indica el id es un valor de tipo double, entonces definimos aquí un double 00:11:16
de result, pues aquí tendremos un valor 00:11:23
que en unas ejecuciones estará siempre entre 0 y 1 00:11:28
y caerá una vez entre 0 y 0,33, otra vez entre 0,33 00:11:32
y 0,66 y otra entre 0,66 y 0,69 00:11:37
entonces vamos a hacer esa comprobación, decimos if 00:11:41
si de result es menor 00:11:45
que 0,33, pues ahí haremos 00:11:51
algo. El shift podríamos poner de result es menor que 00:11:59
0,66. Fijaros que esto sería periodo, en verdad. Podríamos poner 00:12:10
aquí más 6 y más 3. 00:12:15
Lógicamente no podemos poner infinitos. Tendríamos que considerar 00:12:19
el rango de valores que aceptan los double. Vamos a poner ahí unos cuantos 00:12:22
y ya está. Y si no else, pues resultará que me habrá 00:12:26
dado la tercera de las opciones. Fijaros que si vale 00:12:33
0,1 también es menor de 0,66 pero como el if es excluyente si valiese menor de 0,3 ya habría ejecutado esta parte con lo cual tenemos la garantía de que por aquí pasará solamente dado que aquí lo que hemos comprobado es que sea menor de 0,33 solamente pasará en el caso de que sea de que esté entre 0,33 y 0,66 y ya si no es menor de 0,66 pues estará entre 0,66 y 1 y pasaremos por el último else. 00:12:37
Bueno, pues aquí podemos poner el valor ese color, ponemos el valor que sea, cualquiera de los tres, no me acuerdo, era marrón, verde y azul, creo recordar, o rojo, no me acuerdo, bueno, es igual, marrón, verde y azul. 00:13:07
Bueno, aquí tendríamos el método, el setter, un poquito particular porque no recibimos ningún atributo y además lo hemos definido como private porque su acceso se hace desde la propia clase. 00:13:35
Luego en el ejercicio, por trabajar algunas cosas más de las que estábamos viendo, creo recordar que habíamos definido unas constantes para estos valores, pues bueno, podríamos ponerlo y así lo trabajamos también. 00:13:46
Recordad, fijaros, eso es un valor de tipo double, podríamos poner double, podríamos poner d un tercio y decir que esto sea igual a, perdón, es un número 0.3333. 00:14:00
entonces aquí la comprobación, bueno, pues la podríamos hacer justo con esta variable 00:14:21
¿qué sucede en este caso? que hemos definido la variable 00:14:25
o sea, hemos definido de un tercio como una variable 00:14:28
entonces por aquí podríamos, en cualquier sitio del código 00:14:33
ya que lo hemos definido como parte de un atributo de la clase 00:14:37
podríamos decir que un tercio sea igual a 2, es decir, nos permite modificar 00:14:41
su valor, en el contexto de este ejercicio un tercio nunca debería cambiar 00:14:45
su valor, entonces si lo convertimos en final 00:14:51
lo que es una variable se convierte en una constante y ahora ya 00:14:54
fijaros que ya el propio IDE se da cuenta y no me compila porque dice 00:14:59
oye mira, si has puesto finales porque es una constante no intentes cambiar su valor porque no 00:15:03
ha lugar. Y para completar, fijaros que 00:15:07
no le importa este nombre para una 00:15:15
constante de tipo double, pero sí que habíamos llegado a un convenio también 00:15:19
igual que los métodos empiezan por minúscula y las clases por mayúscula, 00:15:23
de que las constantes aparezcan con todas sus letras en mayúscula. 00:15:27
Entonces, bueno, pues lo correcto, según lo que tenemos acordado, sería algo así. 00:15:33
Y luego, pues podríamos crear una constante para dos tercios, 00:15:39
igual que hemos hecho para uno, dos tercios. 00:15:43
Y aquí hacemos esta comprobación. 00:15:57
fijaros, si queremos ser puristas incluso 00:15:59
para seguir un poco lo que venimos hablando a veces 00:16:03
una placa está caracterizada como atributo 00:16:06
por su color, bueno pues 00:16:10
si fuera la clase más extensa tendría su marca, su peso 00:16:12
sus dimensiones, lo que fuese, eso caracterizaría a una placa 00:16:16
pero bueno, no tiene mucho sentido quizás 00:16:19
que utilicemos un tercio y dos tercios 00:16:22
como atributos 00:16:25
Entonces, quizás ya que son dos variables locales, no son algo que caracterizan en sí a la placa y son dos constantes que vamos a utilizar en el contexto de este método, quizás vendría mejor definirlas aquí. 00:16:26
No recuerdo ahora mismo dónde están definidas en el ejemplo que os he pasado, pero quizás dentro de SetColor, siendo puristas en lo que es el diseño de la placa, ya que un tercio y dos tercios no son características propias de una placa, y si información necesaria para aplicar el color, igual podría venir mejor definirlo aquí que allí arriba. 00:16:43
Y con esto, bueno, pues yo creo que ya tendríamos acabado lo que es. Bueno, esto ya sobra, claro. Esto en realidad no está haciendo nada porque ese color venía del setter de cuando teníamos aquí el parámetro del método setColor y se lo aplicaba al de clase. 00:17:02
entonces esto lo quitamos y aquí lo tendríamos 00:17:26
la placa y el frigorífico. Vámonos a la cocina 00:17:31
según el ejercicio que estamos desarrollando ahora aquí 00:17:35
nos hemos propuesto hacer que la cocina sea el punto de arranque 00:17:39
del programa, con lo cual será la que tenga el método main 00:17:44
entonces ponemos aquí public 00:17:48
static void main, como siempre 00:17:52
todas estas sintaxis que utilizamos para el main string recibe puede recibir como atributos el 00:17:57
método main como métodos el método main una raíz de strings en algún momento hemos hablado de 00:18:04
de cómo de cómo se mete esta información al main y aquí lo tenemos el punto de arranque 00:18:11
os ha denunciado un momento dice la cocina inicia el programa y tendrá las siguientes 00:18:18
características, nombre de la cocina, si tiene o no tiene frigorífico, si tiene o no tiene placa, el 00:18:26
número de frigoríficos, el número de placas y el array de frigoríficos y de placas que donde vamos 00:18:34
a ir guardando esa información. Pues ahora vamos a ello. Nos dice que tiene un string, ese nombre de 00:18:42
la cocina un boolean ve frigorífico tiene frigorífico o no tiene un boolean que nos indique 00:18:50
si tiene placa o no tiene placa esto podríamos si queréis inicializar la falsa los boolean en 00:19:07
verdad si no decimos nada si está están inicializados por defecto a falsa luego hablaba 00:19:13
del número de frigoríficos y numfrig número de frigoríficos lo podemos inicializar a cero aunque 00:19:20
de igual forma que esto se inicializa a false, un número se inicializa 00:19:28
por defecto a cero, placas, 00:19:32
frigoríficos, número de frigoríficos, número de placas 00:19:38
y luego los arrays. En los arrays 00:19:40
tenemos un array de frigoríficos y un array de placas. 00:19:45
Fijaros que no estamos dimensionando aquí todavía con 00:20:09
un new, como típicamente haríamos. No estamos 00:20:12
haciendo esto todavía poniendo aquí un determinado valor porque no sabemos si en esta ejecución la 00:20:19
cocina va a tener frigoríficos o no. Habrá un momento en el que lo pediremos por teclado y 00:20:24
tendremos que hacer esta acción y de la misma forma sucede con las placas. Luego cuando lleguemos a 00:20:29
ello lo repasamos. Bueno, todos en principio todas estas variables vamos a trabajar sobre ellas 00:20:35
principalmente desde el método main. 00:20:46
Recordad, el método main es static, es decir, es único. 00:20:48
Entonces, o bien, tendríamos que trabajar instanciando una cocina 00:20:52
para que desde un sitio static podamos hacer referencia 00:20:57
a la cocina con la que queremos trabajar. 00:21:02
Fijaros, si ponemos aquí ese nombre directamente al valor que sea, 00:21:05
luego lo trabajamos según el ejercicio, se me queja. 00:21:11
¿Por qué se queja? 00:21:14
porque dice, este método que sería común 00:21:15
es el main, pero podría ser cualquier otro, por ser static 00:21:19
a la clase cocina, se puede estar ejecutando 00:21:23
para cualquier cocina el mismo código, entonces se está ejecutando para cualquier 00:21:27
cocina el mismo código, y me pones aquí ese nombre, resulta que tú en el 00:21:31
programa podrías tener 5, 6, 7, 8 cocinas, el enunciado dice que trabajemos 00:21:35
con una solo, entonces para todas esas cocinas 00:21:39
de todas esas cocinas, ¿a qué nombre quieres que le dé el A? 00:21:42
El A del nombre de cuál de todas esas cocinas. 00:21:47
En este ejercicio, la verdad es que, según está definido, 00:21:52
no tenemos más de una cocina, con lo cual, 00:21:55
la única cocina que hay tendrá un nombre y no habrá más. 00:21:58
El único frigorífico que hay tendrá este boolean 00:22:02
y así para todas las variables. 00:22:05
Como no hay más de una cocina y no hay lugar a discrepancias 00:22:07
sobre qué cocina queremos trabajar, podríamos ponerlo como static. 00:22:10
Si lo ponemos static, aunque hubiese 00:22:13
más de una cocina, todas tendrían el mismo nombre, pero 00:22:16
justo en este contexto hay una sola cocina, con lo cual el nombre 00:22:18
que se aplicaría a todas las cocinas es el nombre que se aplica 00:22:22
a la única cocina con la que queremos trabajar. 00:22:25
Por eso nos vale poner aquí static y no tenemos que instanciar 00:22:28
ninguna cocina en particular. 00:22:31
Si no trabajásemos con static, ¿qué sucedería? 00:22:34
Pues entonces, para poder hacer esto, 00:22:37
Al no ser el nombre estático, podría pertenecer a muchas cocinas. 00:22:40
Entonces, tendríamos que identificar el nombre de qué cocina sería. 00:22:44
Entonces, diríamos cocina, micod, 1, igual, año, cocina. 00:22:48
Y ahora, sí que entre todas las posibles cocinas tenemos identificada una 00:23:00
y vamos a asignar a A justo a una determinada cocina. 00:23:04
y aquí ya me compilaría. Aquí no habría discrepancias, no pone ese nombre, un ese nombre genérico 00:23:09
que puede ser para muchas cocinas, ya que cada cocina tiene un nombre distinto al no ser estático. 00:23:17
Ahora ya quedaría claro que estamos asignando a A al nombre de una cocina en particular, que es miCoz1. 00:23:23
Otra cocina, que instanciásemos otro objeto, pues tendría un nombre diferente probablemente. 00:23:29
Como en este ejercicio trabajamos con una sola cocina, vamos a hacer que todos estos atributos 00:23:37
estén compartidas, compartidos por todas las cocinas, que al final, como es 00:23:42
única, pues van a ser los atributos de esa única cocina. 00:23:46
Si lo ponemos static todos, serían atributos 00:23:51
compartidos con todas las posibles cocinas que diéramos de alta en el programa, 00:23:58
como solo hay una, pues para esa cocina en particular 00:24:02
todos los atributos. Entonces aquí ya podríamos 00:24:05
poner un ese nombre igual a lo que sea. Por cerrar esto 00:24:10
que os cuento, esto del static, dependiendo del contexto del enunciado 00:24:18
y cómo vayamos a hacer el programa, es posible o no es posible. Si hubiera más de una cocina 00:24:22
no podríamos decir, bueno, para que me compile sin instanciar un objeto lo pongo static 00:24:26
porque cada cocina tendría su nombre. Hay que tener en cuenta un poco las circunstancias 00:24:30
de lo que nos pide el ejercicio y lo que nos demanda. 00:24:34
Pues ya tenemos ahí definidos todos estos e incluso 00:24:40
fijaros, vamos a darle carácter de privados a todos 00:24:43
si luego alguno necesitamos acceder a él desde algún otro sitio, diferente de que desde la clase, pues le cambiamos la visibilidad. 00:24:47
Pero en principio yo creo que todos los accesos lo vamos a hacer desde la clase cocina a estos elementos, con lo cual podrían ser incluso private 00:24:58
para dar seguridad a nuestra clase y que no pueda ser accedida desde otras futuras clases que quizás quisieran modificar estos datos 00:25:05
y a lo mejor podría no interesarnos vale pues nada la información se va recogiendo para ir 00:25:15
trabajando con el programa desde teclado entonces si se va recogiendo el de teclado vamos a definir 00:25:24
un objeto de la clase escáner es la clase escáner que está definida en la librería mira que no lo 00:25:29
lleve por aquí en la java útil las cosas que están definidas en las librerías java lang no 00:25:45
es necesario importarlas porque las consideran todos los proyectos 00:25:50
dado que se entiende que son funciones de uso tan común 00:25:54
que dicen, pues mira, directamente las integramos en cualquier proyecto con el que 00:25:58
se trabaje. El resto de librerías que tenemos disponibles 00:26:02
de Java, pues cada una la tenemos que importar en caso de necesitarlas. 00:26:06
Lógicamente no sería razonable integrar todas las librerías 00:26:10
porque sería mucho código que probablemente nuestros programas no iríamos 00:26:14
utilizando. En este caso, como vamos a usar Scanner y está en Java útil, que no está en 00:26:18
Java lang, tenemos que importarlo. Pues nada, ya nos va compilando. 00:26:22
Todavía por aquí no, pero ya por aquí sí. 00:26:27
Con Scanner tenemos la posibilidad de leer flujos 00:26:30
de datos. Los flujos de datos, luego cuando hablemos de los 00:26:34
ficheros, trataremos los flujos de datos y en una asignatura 00:26:38
que tendréis, probablemente si os matriculáis el año que viene, que es 00:26:42
programación de servicios y procesos, hablaremos de más flujos de datos 00:26:46
de otros tipos. Lo que nos permite es comunicar nuestro programa 00:26:50
con el exterior. Y esta comunicación, pues fijaros, puede ser 00:26:54
bien desde teclado, cosa que vamos a hacer ahora, el flujo de datos desde el teclado 00:26:57
hasta nuestro programa, o los de salidas cuando hacemos un system of println 00:27:02
y sacamos por pantalla, pues es un flujo de datos de salida desde el programa 00:27:05
a la pantalla. También tenemos la posibilidad de tener flujos de datos 00:27:09
a ficheros, para leer o guardar ficheros, o flujo de datos 00:27:14
también a sockets, que es esto que os digo que veréis el año que viene 00:27:18
en la asignatura de PSP. Scanner nos permite manejar 00:27:21
información recibida en el programa a través de un determinado 00:27:25
flujo de datos, que este curso lo estamos utilizando desde teclado 00:27:30
siempre, pero podría ser información que estamos leyendo, por ejemplo, 00:27:33
desde un fichero. Para identificar el flujo, 00:27:37
o desde dónde nos van a llegar los datos al programa a través de este flujo, se lo decimos en el constructor de escáner. 00:27:41
Entonces, en este caso decimos que en particular queremos gestionar con el objeto MyScan de la clase escáner 00:27:48
información que nos va a ir llegando desde el flujo de datos SystemIn. 00:27:54
Y una buena costumbre es que los flujos de datos que abramos terminemos cerrándolos 00:28:01
para que no se queden ahí abiertos y consumiendo recursos 00:28:07
cuando dejemos de trabajar con ese flujo de datos. 00:28:11
Si estamos leyendo un fichero, cuando terminemos de leerlo, 00:28:14
en lugar de dejarlo ahí al aire y consumiendo recursos, 00:28:17
pues vamos a cerrarlo. 00:28:20
Si estamos leyendo el teclado, pues cuando terminemos vamos a cerrarlo. 00:28:22
Entonces ponemos aquí, ponemos la opción Close y aquí me lo cierra. 00:28:26
Daros cuenta que aquí estoy poniendo el Close al final del Main, 00:28:32
que ya estamos terminando el programa, 00:28:35
Si no lo pusiéramos, es verdad que me da un warning aquí, creo, mirad, me da un aviso aquí diciendo, oye, no me gusta mucho que no lo hayas cerrado, fijaros, dice mi scan is never closed, pero como ya se acaba el programa, al finalizar el programa se cerraría en cualquier caso. 00:28:37
pero podría darse la situación de que terminásemos de utilizar mi scan 00:28:52
y por aquí todavía siguiésemos con código de Java haciendo cosas 00:28:57
a lo mejor es un programa 24-7 que no cierra nunca 00:29:01
y si no lo cerramos, pues aquí dejaríamos un recurso consumiéndose de forma innecesaria 00:29:04
entonces, bueno, pues buena costumbre cerrar los flujos de datos 00:29:10
ahí lo tenemos 00:29:14
y ahora bueno, pues vamos a empezar a trabajar con ello 00:29:18
lo primero que nos pide es el nombre de la cocina 00:29:22
Entonces, nos mandamos un mensaje por aquí, println, y solicitamos el nombre de la cocina. 00:29:25
Dime cómo se llama tu cocina. 00:29:35
Si ponemos un system.out.println y utilizamos este método de la clase out que está colgando de system, 00:29:40
resulta que nos pondría este texto por consola y nos saltaría una línea. 00:29:49
Pues en este caso vamos a utilizar el System of Print que nos saca por consola esto y se queda en la misma línea porque no mete el LN. Me parece más cómodo, más razonable el que te aparezca el texto y el cursor se quede aquí para que pongas el nombre. 00:29:52
bueno pues el nombre en principio va a ser un stream pues que vamos a querer cargar en el 00:30:09
nombre que lo tenemos aquí definido como un atributo de la cocina entonces podemos utilizarlo 00:30:18
directamente en este caso ponemos mi scan punto next line ahora ya tenemos aquí el nombre lo 00:30:23
siguiente que hacemos es por recuperar los frigoríficos las placas entonces 00:30:35
por aquí nos dice el número de frigoríficos, nos indica si hay frigoríficos 00:30:41
por aquí, pues vamos a cargar estos datos y lo vamos a instanciar 00:30:48
tanto frigoríficos como vayamos recibiendo por teclado 00:30:52
entonces podemos poner aquí un system.out.println 00:30:56
dime o indica o como queráis el número 00:31:02
de frigoríficos 00:31:08
de la cocina 00:31:12
y si queréis que os quede un poquito más chulito ya que tenemos aquí el nombre 00:31:14
pues podemos decirle, indicarle pues que nos diga 00:31:20
de la cocina esta y le ponemos así, dime el nombre 00:31:23
el número de frigoríficos de la cocina y así nos sale el nombre 00:31:30
que tiene la cocina en la pregunta que lo acabamos de cargar aquí 00:31:35
a través del escáner 00:31:38
aquí es previsible que recibamos un número 00:31:41
y bueno, en un programa que hiciésemos 00:31:45
en los próximos temas, pues a lo mejor correspondería 00:31:49
validar este número, bien por código o bien a través de excepciones 00:31:52
hay un tema de excepciones que viene a suponer 00:31:56
cuando las excepciones son estos mensajes que a veces nos dan aquí de error 00:32:01
cuando una de ellas muy típica es cuando intentamos acceder a 00:32:05
un elemento de un objeto que no hemos instanciado mirad por ejemplo aquí si cogemos y decimos 00:32:08
frigorífico a y nos lo hacemos un new y ahora ponemos aquí a punto ese nombre frigorífico 00:32:14
no tiene nombre es a punto ese marca bueno ese marca es privado pues vamos a utilizar vaya setter 00:32:28
es setter pues venga set marca que sucede que al frigorífico vamos a poner así null incluso como 00:32:36
no lo hemos hecho un new, tiene un null, no tiene reserva de espacio en memoria, entonces 00:32:57
al intentar acceder a uno de sus métodos, pues nos da un fallo. Fijaros, si hacemos aquí la ejecución, 00:33:01
bueno, aquí nos da un fallo. Fijaros que los mensajes que nos saca es 00:33:08
de excepción, bueno, en particular de null pointer exception, 00:33:11
el a apunta a null, entonces da 00:33:16
una excepción de null pointer exception, entonces estas excepciones 00:33:19
se pueden trabajar desde el código, 00:33:23
no las puedes evitar si se dan, pero 00:33:26
puedes hacer que el programa no se termine y gestionar 00:33:29
cómo quieres tú procesar cuando se dé una de esas excepciones. 00:33:33
Lo veremos en algún otro tema. Otro caso típico, este es uno muy típico para 00:33:37
provocar una excepción y que lo podáis ver y que se os puede dar, y otro es 00:33:41
si por ejemplo se produce una división entre cero. Si tú cualquier número 00:33:45
lógicamente lo divides entre cero, pues el número que te da es infinito. 00:33:49
entonces el procesador no es capaz de gestionar un número 00:33:52
que sea infinito y nos da una excepción 00:33:58
entonces esta excepción nos daría un mensaje de este tipo 00:34:00
y cuando se produce una excepción 00:34:05
si no está controlada el programa se termina 00:34:06
suponed que es un programa 24-7 00:34:09
está ahí en un cajero 00:34:14
que queremos que esté trabajando de forma continuada 00:34:15
y hay una situación en la que en base a unos datos 00:34:17
que puedas meter tú por teclado, podría darse una excepción. 00:34:21
Cuando metes otros datos, que son los razonables, 00:34:25
el programa hace el procesamiento que corresponda, 00:34:27
pero bajo ciertos datos sí que da esa excepción. 00:34:30
Si no la tienes controlada, ¿qué sucedería? 00:34:34
Que acabaría el programa y nos quedaríamos sin cajero 00:34:36
hasta que fuera a reiniciarlo algún operario. 00:34:38
Si lo tienes controlado, puedes gestionar lo que tiene que pasar 00:34:41
cuando se dé esa excepción y mantener el programa en funcionamiento. 00:34:45
Otra posible excepción es que si vamos a intentar cargar en una variable numérica un dato alfanumérico, pues nos da una excepción también y el programa se terminaría, pues otra de otro tipo. 00:34:50
Que sería lo que nos podría suceder aquí en caso de que si vamos a cargar en una variable de tipo numérico una cadena de caracteres y decimos que el número de frigoríficos es hola, pues nos daría una excepción. 00:35:02
Vamos a hacer el programa sin errores y pues ponemos la gestión de excepciones para cuando lleguemos a su tema. 00:35:13
Entonces bueno, pues para cargar el número de frigoríficos, pues fijaros, podríamos poner que el número de frigoríficos sea igual a mi scan.nestint. 00:35:23
esto me devuelve un entero que lo cargaría 00:35:36
aquí y me dejaría en el buffer de lectura todavía 00:35:53
disponible el enter, cuando yo escribo aquí en la 00:35:56
consola el número, pues pondré un 4, un 3 y luego 00:36:01
le daré enter, este NSINT me leerá el 3 y ese 00:36:04
enter quedará pendiente en el buffer de lectura y bueno, pues 00:36:08
en ciertas circunstancias podría llegar a darnos algún problema, una posibilidad 00:36:12
hace es limpiar el buffer de lectura, haciendo un nestline aquí 00:36:16
sin cargárselo a nadie, con lo cual esto me cargaría 00:36:20
el 4 y esto me cargaría el enter sin metérselo a nadie, pero limpio el buffer 00:36:25
de lectura. Y otra alternativa, bueno, pues la que yo estoy 00:36:28
acostumbrado a hacer, que os digo siempre, es leerlo siempre con 00:36:32
un nestline y luego hacer la conversión que corresponda. Cualquiera de las dos opciones 00:36:35
en verdad están bien. Pues yo defino por aquí una variable SAUS 00:36:42
aunque aquí estoy leyendo un número 00:36:48
voy a leer de escáner un next line 00:36:52
con lo cual aquí podría tener algo que es un número 00:36:56
pero en realidad es una cadena de caracteres, sería el 3 como cadena de caracteres o el 2 00:37:12
o lo que correspondiese y ahora para pasar esto a número 00:37:16
utilizamos integer. 00:37:19
Recordad que el número de frigoríficos es de tipo int 00:37:25
que es un dato primitivo y los datos primitivos pues tienen sus características particulares, no es necesario hacer el new, pero no tienen como cuando definimos un dato referenciado, por ejemplo un frigorífico, ciertos métodos propios de una clase. 00:37:30
Entonces, para poder trabajar con métodos, hacer acciones que tengan que ver con el entero, que el int en particular no tiene esos métodos, utilizamos su clase graper o envoltoria. 00:37:44
Entonces, todas las clases en verdad tienen estas primitivas, tienen su clase envoltorio, la int pues tiene la integer. 00:37:56
entonces esta sí que tiene una serie de métodos entonces el método parseInt 00:38:03
que ya lo conocemos recibe como atributo un string 00:38:07
y devuelve hacia la izquierda una variable de tipo 00:38:11
como nos chiva aquí, como nos chiva eclipse 00:38:17
una variable de tipo entero, veis por aquí 00:38:21
con lo cual aquí ya tendríamos el frigorífico y como hemos hecho una lectura con nestline 00:38:24
aparte de coger el número pues ha limpiado el buffer porque ha considerado 00:38:30
el enter. En definitiva aquí de esta parte de la ejecución 00:38:35
tendremos que tenemos o cero frigoríficos o n frigoríficos 00:38:43
pues podríamos decir sí. El número 00:38:46
de frigoríficos es mayor que cero 00:38:51
bueno pues vamos a trabajar con los frigoríficos. Una primera cosa 00:38:57
que podemos hacer es decir que si el número de frigoríficos es mayor 00:39:05
que cero vamos a indicar en este boolean que hay frigoríficos por si queremos 00:39:09
utilizar esto luego en algún momento para algo. Bueno, como el número de frigoríficos 00:39:12
ha sido mayor que cero, vamos a, tendemos 00:39:18
el número de frigoríficos, el boolean ya indicando que es cero y el otro 00:39:22
lo que vamos a hacer va a ser construir el array, dimensionarlo 00:39:26
según el número de frigoríficos y meter la información 00:39:30
que corresponda. Recordad que para los frigoríficos la información era indicar 00:39:34
su marca. Bueno, pues podemos utilizar un bucle 00:39:38
y aprovecharnos de los datos que tenemos. 00:39:43
Entonces decimos int i igual a cero, vamos a recorrer todo el bucle, 00:39:47
mientras i sea menor que el número de frigoríficos, i más más. 00:39:52
Y aquí vamos a ir trabajando en el array construyéndolo. 00:40:09
Una primera cosa que podemos hacer aquí, como ya sabemos, 00:40:12
el número de frigoríficos es dimensionar el array. 00:40:15
Entonces podemos coger y decir que mi array de frigoríficos 00:40:18
new frigorífico 00:40:22
inundefrigoríficos. Fijaros que aquí lo que hemos hecho ha sido 00:40:29
fijaros que esto no es el constructor del frigorífico, hemos puesto los corchetes 00:40:37
y no los paréntesis, lo que significa que no estamos 00:40:42
dando de alta el espacio de memoria para un determinado frigorífico, lo que estamos 00:40:46
construyendo es un array de referencias a frigoríficos 00:40:50
tantas referencias como hayamos indicado de frigoríficos que hay, pero cada uno 00:40:53
esos frigoríficos todavía no tiene su espacio en particular donde por ejemplo aplicar la marca 00:40:58
que tiene ese frigorífico ese frigorífico entonces aquí lo que hemos dado es dimensionado en la red 00:41:04
de frigoríficos y ahora en este ford lo que vamos a hacer es lo que hacemos es recorrer cada uno de 00:41:12
los frigoríficos para ir trabajando con él. Entonces cogemos y decimos 00:41:18
arfrig y daros cuenta que esto 00:41:25
en la primera iteración del bucle for será cero, en la segunda 00:41:33
como incrementamos será uno, la tercera será dos, la cuarta será tres 00:41:38
y nos saldremos del for cuando hayamos recorrido todos los 00:41:42
frigoríficos y ahora hacemos un new frigorífico 00:41:46
Y aquí sí que ponemos el constructor del frigorífico. Aquí estamos pidiendo al sistema operativo espacio de memoria donde guardar información de esto, que esto es un frigorífico en particular, uno de todo ese grupo de frigoríficos que están recogidos dentro y quito el corchete de este nombre que es una red de frigoríficos. 00:41:52
Esto es, mi ARFRIG es un array de frigoríficos, mi ARFRIG, y entre corchetes con un número ahí, es un frigorífico en particular, y para ese frigorífico en particular llamamos al constructor, igual que lo haríamos si definiésemos un frigorífico fuera del array, diríamos frigorífico A, esto es un frigorífico, igual que esto es un frigorífico, igual a new frigorífico. 00:42:16
y para este frigorífico A en particular 00:42:49
lo que estamos haciendo es llamar al constructor del frigorífico 00:42:54
después del new, para este frigorífico en particular 00:42:57
estamos llamando al constructor del frigorífico después del new 00:42:59
aquí que no llamamos al constructor 00:43:02
lo que hacíamos era dimensionar el array de frigoríficos 00:43:05
pero un array de referencias a frigoríficos 00:43:09
no de frigoríficos ya con todo su cuerpo 00:43:11
digamos, vale pues una vez hecho esto 00:43:15
lo que tenemos que hacer para cada uno de los frigoríficos es pedir por teclado su marca. 00:43:23
Entonces decimos system.out.println, dime la marca del frigorífico. 00:43:28
Ponemos un system.out.print para que nos quede la misma línea. 00:43:49
Y aquí, bueno, con escáner podemos recuperar la marca. 00:43:53
Fijaros, si queremos que este nombre en cada una de las iteraciones, 00:43:58
pues vaya un poquito más acorde a, ya estoy pidiendo la marca del primero de los frigoríficos, del array y del segundo, pues tenemos la i que nos va recorriendo en cada ejecución del bucle tiene un valor diferente, la primera será 0, pues si el frigorífico del array 0 lo queremos enumerar como primero de los frigoríficos, pues aquí podríamos poner, dime la del frigorífico y aquí poner, si ponemos i nos diría el frigorífico 0, 00:44:02
Y si queremos que el frigorífico 0 en el mensaje sea el frigorífico 1, 00:44:32
pues podemos poner i más 1. 00:44:35
Para que 0 más 1 se convierta en 1 y nos diga, dime la marca del frigorífico 1. 00:44:38
En la siguiente iteración, que i valga 1, pues ya este i más 1 será 2. 00:44:43
Entonces dirá, dime la marca del frigorífico 2. 00:44:48
Y después de eso ponemos los dos puntos, un espacio aquí, 00:44:55
y dejamos el cursor, porque hemos puesto el método print en lugar de println, 00:44:57
justo en esa línea a continuación para meter la marca. 00:45:02
la marca en principio va a ser un string y vamos a querer que termine guardada 00:45:04
la variable se marca que es un atributo de que tienen todos los frigoríficos fijaros que como 00:45:14
bueno pues que es un atributo de clase pues entonces podríamos si queréis cargarlo 00:45:21
directamente en este atributo entonces decimos mi frío y esto que es un frigorífico el que está 00:45:24
en esta iteración trabajando, setMarca 00:45:31
y aquí podríamos poner, ahora después la rompemos esta línea 00:45:35
en varios, myScan.nextLine 00:45:44
¿Cómo se ejecutaría esta línea? 00:45:53
Después de esto se quedaría parada aquí esperando a recibir una información 00:45:58
esto devuelve un string que se pasaría al método setMarca 00:46:02
y el método setMarca se lo asignaría a 00:46:06
ese marca atributo de la clase frigorífico. 00:46:10
Si esto os cuesta verlo todavía un poco, algunos, pues lo que 00:46:15
podríamos hacer es decir, pues mira, vamos a coger en la variable 00:46:19
esta SAUS que habíamos utilizado por aquí, la tenemos, fijaros 00:46:22
aquí, podemos decir SAUS igual a mi scan punto next line, aquí 00:46:26
cojo la marca del frigorífico y la tengo en SAUS y ahora podría 00:46:34
llamar al método setMarca del frigorífico 00:46:38
pasándole ese aus. 00:46:41
Esta línea recoge 00:46:52
estas dos en una sola, como más os guste. 00:46:54
Y bueno, yo creo que no habría mucho más que hacer 00:47:01
con los frigoríficos. Si el número de frigoríficos es mayor que 0 00:47:02
que no lo he archivado aquí, si es 0, no hace 00:47:05
el if, ve frigorífico, lo hemos inicializado 00:47:08
por aquí a false, con lo cual no habría frigoríficos 00:47:12
y el número de frigoríficos sería cero, como hay cero 00:47:15
pues no hemos dimensionado el array de frigoríficos 00:47:18
pues no habría que hacer nada si es cero, y si es mayor que cero 00:47:22
pues entonces es cuando hay algún frigorífico, decimos que si hay algún frigorífico 00:47:26
dimensionamos el array para un frigorífico, para 10, para 20, para los que sea 00:47:30
y con este bucle para cada uno de ellos, creamos 00:47:34
cada uno de los frigoríficos y cogemos su marca 00:47:38
nombre de la cocina recuperar información de frigoríficos vale ahí tenemos el nombre los 00:47:41
frigoríficos pues vamos a por las placas recuperar información de placas vamos a utilizar un poquito 00:48:11
todo lo que podamos por aquí con los copies pegas entonces dice dime el número de placas lo cargamos 00:48:21
y en lugar de guardar la variable de número de frigoríficos lo vamos a guardar en el de número 00:48:31
de placas. Tendremos 0 00:48:35
o n placas. No validamos que sea un número, ya os digo, ya lo haremos 00:48:39
cuando toque eso. Y para cargar información 00:48:43
de las placas, vamos a hacer copy-paste de esto y lo vamos modificando 00:48:47
que va a ser más rápido. Entonces, si el número de placas es mayor que 0 00:48:51
si el número de placas no es mayor que 0, no se ejecuta este 00:48:55
if, el código se vendría por aquí. Entonces ya el número 00:49:04
de placas lo habíamos inicializado por aquí 00:49:08
a cero 00:49:10
y la existencia o no existencia de 00:49:11
placas la habíamos puesto a false. 00:49:14
Si resulta que el número 00:49:17
no es cero, pues entonces 00:49:18
el boolean este de placas 00:49:20
lo primero que hacemos es decir que 00:49:22
hoy hay alguna placa ya 00:49:24
y aquí en el caso 00:49:25
anterior habíamos dimensionado el array de frigoríficos 00:49:28
pues vamos a dimensionar el array 00:49:31
de placas. Decimos 00:49:32
el array de placas 00:49:36
new, pero ahora no, new de 00:49:38
frigoríficos, a ver, perdón, el array de placas aquí y no hacemos un new de frigoríficos 00:49:40
sino que hacemos un new de placas y ahora el número de placas que tenemos es el que 00:49:51
tenemos aquí. Se llama placa la clase, fijaros, placa por aquí, entonces por eso se queja, 00:49:57
placa, tan, ahí lo tenemos, aquí acabamos de dimensionar el número de placas, hacemos un recorrido por cada una de las placas, desde I0 hasta el número de placas y más más y en cada una de estas vueltas estamos trabajando con cada una de las placas, entonces para cada una de las placas que tenemos en el array, hacemos un new para esa placa en particular, 00:50:03
Igual que comentábamos antes para los frigoríficos, aquí fijaros que estamos dimensionando el array, son corchetes, no son paréntesis, no es el constructor. 00:50:36
Y aquí para cada una de ellas, esto es una placa, esto sería el array de placas, si le metemos los corchetes y el i, esto sería una placa en particular. 00:50:45
Esta placa en particular, para ella no hemos hecho el new, porque esto es un array de referencias a placa, lo que acabamos de dimensionar aquí. 00:50:54
Para esta placa le hacemos un new y ahora sí que llamamos al constructor de la placa. 00:51:00
fijaros que aquí es más sencillo que en el caso de los frigoríficos porque hemos hecho el trabajo ya previamente 00:51:04
cuando estamos haciendo el new de la placa, llamamos al constructor que no recibe parámetros 00:51:13
y aquí el constructor que no recibe parámetros, recordad que lo que hacía era llamar al método setColor 00:51:19
y el método setColor de forma aleatoria a través del método random de la clase mat 00:51:23
aplicaba al color de la placa un determinado color, marrón, verde o azul 00:51:31
Con lo cual, para las placas poco más que hacer yo creo por aquí. Y ahora lo que nos decía por aquí el ejercicio es que la clase cocina tendrá como método, este método, el método informof, que es el que nos saca estos resultados en base a, bueno, por la información que tengan los arrays que tiene como atributos. 00:51:35
vamos a construir este método 00:52:00
aquí lo llamamos informof 00:52:02
no me compila de momento 00:52:08
porque no lo tengo construido 00:52:12
el método informof 00:52:13
a ver si nos dice que tiene que devolver el string 00:52:18
o no nos lo indica 00:52:21
habría dos opciones, que el método informof 00:52:23
devuelva un string con esto 00:52:25
y luego mostrarlo desde el main 00:52:26
o que el método informof 00:52:29
directamente haga el system of println 00:52:31
de esto, no veo por aquí 00:52:33
que lo diga o si 00:52:37
construye bueno no parece que sea un requisito ni de una forma ni de otra 00:52:38
bueno vamos a hacer lo que lo escriba directamente informó y luego si no que lo devuelva después si 00:52:47
lo escribe directamente ponemos aquí un public void si lo escribe directamente no necesitamos 00:52:53
que devuelva nada informó hemos decidido en principio que no reciba ningún atributo o sea 00:53:00
ningún parámetro, este método en principio no parece que vaya a ser necesario 00:53:13
porque vamos a trabajar con los atributos de la clase 00:53:17
cocina y precisamente este es un método de la clase cocina, estos atributos 00:53:21
están disponibles para cualquier método de la clase, ¿por qué? porque 00:53:26
pertenecen al ámbito de la cocina y el ámbito de la cocina empieza ahí 00:53:29
y termina aquí, con lo cual están dentro. 00:53:33
Es cierto que 00:53:39
aquí nos está dando un error y el motivo es lo mismo que nos pasaba antes 00:53:40
cuando estábamos hablando de utilizar de forma estática 00:53:45
estos métodos, el nombre de la cocina cuando empezábamos a desarrollar 00:53:49
el main. Y lo que está pasando aquí es que desde el método 00:53:53
main, que según está definido en el ejercicio es un método de la 00:53:57
clase cocina, es estático, con lo cual se podría estar ejecutando 00:54:01
para cualquier cocina. Y aquí estamos llamando a un método 00:54:05
informof que no es estático, es decir, cada cocina en particular 00:54:09
tendría su método informof. Entonces dice, informof 00:54:13
exactamente de qué cocina quieres informarme. Fijaros, aquí 00:54:17
podríamos tener cocina, coz1 00:54:21
igual año cocina 00:54:26
el ejercicio solo nos pide una cocina, pero bueno, para justificar 00:54:29
por qué no nos está compilando. Fijaros que aquí tenemos dos cocinas y podríamos 00:54:36
tenemos que tener claro, definidas muchas más, cada una de estas dos cocinas 00:54:41
al no ser este método estático, tendrá, digamos, la posibilidad 00:54:45
de ejecutar su propio método informof. Y aquí estamos llamando a un 00:54:49
informof y hay ambigüedad, porque dice de la cocina 1, de la cocina 2, 00:54:53
de otras cocinas que puedas definir por ahí, no tengo ni idea. 00:54:57
Si pusiéramos esto, pues ya me compilaría y diría 00:55:02
ya no hay lugar a dudas, este método informof está diciendo que es 00:55:06
que se ejecute justo el método relativo a la cocina 1 00:55:10
no a la cocina 2, no hay ambigüedad, compilo 00:55:13
en este ejercicio nos podemos permitir el lujo 00:55:15
de convertir este método también en static 00:55:20
entonces ya me compila perfectamente 00:55:23
porque hay ambigüedades ahora de que método 00:55:27
informof se va a ejecutar si lo llamo aquí 00:55:29
sin indicar un objeto de la clase cocina 00:55:33
no, ninguno, si este método es común absolutamente a todas las cocinas 00:55:36
pues ya está, es el único que hay 00:55:39
desde un sitio estático, estamos llamando a un sitio estático 00:55:41
no hay problema en ningún caso porque todo pertenece a la clase cocina 00:55:45
pues ya está, este es el método que pertenece a la clase cocina y está compartido con 00:55:49
todos los objetos posibles que tengamos definidos de cocinas 00:55:53
dentro del código. Una vez que me compila, pues nada, pues a trabajar 00:55:57
un poco con el ejercicio. Aquí 00:56:05
lo que podemos hacer es poner un system.out.println 00:56:08
Bueno, pues podemos primero definir un string aquí, ese mensaje o esa información, ese mens, y decir que es lo que voy a escribir aquí. 00:56:14
Y ahora podríamos dentro de aquí entre medias construir el mensaje que quiero escribir por pantalla y mostrarlo aquí al final. 00:56:35
por ser los atributos de clases 00:56:44
compila aunque no los inicialices, pero las variables locales tienes que 00:56:52
inicializarlas, si no, no compila 00:56:57
aquí se queja y dice, oye, está sin asignar ningún valor 00:56:59
si ya tienes los inicializados, pues ya dice, vale, me parece bien 00:57:04
compilo, me gusta, entonces bueno, el mensaje 00:57:11
si os acordáis, por aquí tenemos 00:57:17
diferentes opciones de mensaje. Todos los mensajes tienen aquí un bloque 00:57:21
que es común y siempre aparece porque todas las cocinas tienen 00:57:25
un nombre. Ya está, pues podemos empezar construyéndolo con esto 00:57:28
y luego ya en función de si hay frigoríficos o no hay placas y el número de frigoríficos 00:57:33
y placas que hay, pues construimos el resto 00:57:37
del mensaje. Pero este bloque sí que es común. Entonces, como 00:57:41
ese bloque es común y siempre va a salir una vez que hagamos el System of Println 00:57:45
pues lo podemos poner aquí decimos la cocina y el nombre de la cocina lo tenemos aquí en esta 00:57:49
variable y luego podemos aquí poner un espacio que nos separe el nombre de la cocina es lo que 00:58:00
le está pasando aquí más aquí después del nombre de la cocina siempre hay un espacio y bueno hay 00:58:14
un espacio bueno pone tiene o no tiene o sea que ahí habría que jugar con esto este mensaje ahora 00:58:25
vamos a construir el mensaje de no tiene frigoríficos o tiene el número 00:58:32
de frigoríficos que sea. Y luego ya después, pues trabajaremos 00:58:36
para construir la parte de las placas. 00:58:40
Para el número de frigoríficos, pues tendremos que comprobar 00:58:48
si hay frigoríficos. Tenemos la verdad duplicada de información 00:58:52
aquí, porque aquí sabemos si hay frigoríficos o no, pero ya que hemos definido 00:58:56
esta variable de si hay frigoríficos booleana, vamos a utilizarla. 00:59:00
estas variables en verdad, hubieran sido 00:59:03
prescindibles, porque el dato de si lo hay o no lo hay, lo tenemos aquí 00:59:07
mirando a ver si el número de frigoríficos y de placas es cero o no lo es 00:59:11
pero bueno, ya que lo tenemos, vamos a decir, si hay frigoríficos 00:59:15
pues tendrá que pasar algo, y si no hay frigoríficos 00:59:19
pues tendrá que pasar algo también, a ver como es 00:59:26
el mensaje, si no tiene frigoríficos nos iremos por el else 00:59:40
y si tiene frigoríficos, pues dice 00:59:47
tiene el número de frigorífico, bueno si es uno 00:59:50
frigorífico y si son varios, frigoríficos 00:59:54
bueno, pues esto podemos ir trabajándolo con if else 00:59:57
vamos a, desde luego 01:00:00
habremos ido por la zona de frigoríficos 01:00:03
para todas estas, tiene que poner tiene 01:00:06
un y frigorífico, frigoríficos 01:00:08
si llegamos aquí, podemos decir ese mensaje 01:00:11
será igual a ese mensaje, ¿verdad? Para no perder lo que tenemos hasta ahora. 01:00:17
Aquí, si he entrado por aquí y resulta que tiene frigoríficos, pues ponemos 01:00:23
tiene más y el número de frigoríficos 01:00:27
lo tenemos en esta variable. Y ahora, después 01:00:32
de este número, hay que poner o frigorífico o frigoríficos. 01:00:50
Si es uno, será frigorífico. Si es más de uno, sería frigoríficos. 01:00:57
El espacio se lo he puesto ya aquí, entonces no se lo pongo aquí. 01:01:25
y si le voy a poner un espacio para luego después 01:01:28
y si no, pues aquí sería frigoríficos 01:01:35
y si nos hemos venido por aquí, que este es el else 01:01:38
entonces el mensaje tendrá que ser 01:01:44
que no tiene frigoríficos 01:01:49
a ver cómo es exactamente, no lo dice el enunciado 01:01:51
no tiene frigoríficos 01:01:57
hasta aquí hemos construido por aquí el nombre 01:02:01
y yo creo que aquí tenemos construido los frigoríficos 01:02:16
no sé si nos falta algo, si no luego con la ejecución 01:02:20
lo retocamos. Y ahora vamos a trabajar 01:02:31
con las placas. Decimos 01:02:44
if, vamos a ver si tiene placas o no 01:02:48
bPlaca 01:02:52
aquí 01:02:55
tenemos garantía de que hay alguna 01:02:57
placa, una o varias, pero hay placas 01:03:01
y por aquí no hay placas. Vamos primero 01:03:04
que es más cortito por aquí tendríamos toda la jugada de los frigoríficos y no tiene placas 01:03:16
si no hay placas pues por aquí tenemos que poner y no tiene placas pues ahora vamos a ponerlo por 01:03:26
aquí y por aquí estamos donde sí que hay placas bueno aquí nos falta por poner las marcas es 01:03:37
verdad en caso de que tenga frigoríficos no sé si tiene un frigorífico de marca favor de marcas 01:03:50
vaya vale ahí bueno pues tenemos que poner esto de las marcas frigorífico de marca tiene un 01:03:59
frigorífico de marca vamos a abrir el paréntesis y por aquí tenemos que recorrer el bueno si es 01:04:09
un solo frigorífico entonces sería mucho más directo en el caso de ser uno porque diríamos 01:04:20
esto más está en la posición como son solo frigorífico pues será la posición 0 de la 01:04:26
raíz primero de los frigoríficos posición 0 punto get perdón frigorífico no eso es el nombre de la 01:04:34
clase mirar fríos de frigoríficos posición 0 punto get marca y luego cerramos esto es así 01:04:47
es como queda con un frigorífico solo y luego un espacio para lo de las placas, espacio y si tienen 01:05:05
más de un frigorífico pues sería frigoríficos de marcas y aquí tendremos que hacer un recorrido 01:05:20
por el bucle, con un for, le decimos for inti igual a cero mientras i sea menor que el número 01:05:32
de frigoríficos y más más. Y cada uno de los frigoríficos pues tendrá que añadir su marca. 01:05:51
pues lo que cogeremos será esto 01:06:03
aquí en lugar de 0 tendrá que ser i 01:06:11
esto habrá que añadirlo al mensaje 01:06:15
y a ver cómo es el texto exactamente 01:06:18
y hay un espacio por lo que veo por aquí 01:06:28
para cada uno de estos hay un espacio 01:06:33
pues vamos a meterle un espacio 01:06:35
para separar cada uno de ellos 01:06:37
más un espacio 01:06:39
y luego el mensaje 01:06:45
cuando ya han terminado todos 01:06:51
que cierre el paréntesis, es cierto, luego si queréis 01:06:53
incluso lo intentamos manejar, algún paréntesis me falta 01:07:07
que el último no tendría este espacio para que cierre el paréntesis junto a la marca 01:07:10
del último, lo podemos intentar luego si os parece 01:07:15
lo manejamos aquí o lo dejamos así tal cual, a ver 01:07:19
que es lo que me pasa por aquí, este me sobra, bueno vamos a meter 01:07:22
las placas, dice aquí no tiene placas, en caso de tener placas pues será algo 01:07:35
parecido a esto, en verdad, voy a hacer un copia y pega y lo adaptamos 01:07:39
en lugar de decir aquí tiene inund de frigoríficos, habrá que decir el número 01:07:48
de placas, aquí lo cogemos, el número de placas 01:07:58
tiene estas placas, si es un solo frigorífico 01:08:04
a ver, el formato para poner el color también es así, es 01:08:13
el mismo estilo, entonces array de frigoríficos no 01:08:17
sino tendrá que ser el array de placas, mi array de 01:08:24
placas por aquí, placa de color y en lugar de get marca, punto get color, ahí está y si tiene más, tiene placas de colores y hacemos un recorrido en el bucle igual que habíamos hecho antes con los frigoríficos, sobre el array de frigoríficos recuperando sus colores, se van asignando al mensaje y luego cerramos por aquí, 01:08:31
bueno, podemos hacer un intento de ejecución, a ver qué pasa 01:09:12
en otras tutorías os he dicho que quizás no sea lo más recomendable 01:09:20
bueno, pues como lo hago yo aquí en las tutorías 01:09:26
de meter todo el código y no lanzar ninguna ejecución, siempre es mucho más 01:09:29
aconsejable, sobre todo cuando estéis empezando, ir haciendo ejecuciones 01:09:34
parciales para ir detectando posibles errores que vayáis teniendo 01:09:38
y así normalmente los errores que vayan apareciendo 01:09:42
de una ejecución a otra, pues estarán integrados dentro 01:09:46
del último código que habéis puesto. Si hacéis todo y ahora no funciona, pues 01:09:50
en verdad tenemos mucho código donde mirar para intentar resolverlo. Mejor ir haciendo 01:09:54
ejecuciones parciales e ir probando cosas poco a poco. Bueno, 01:09:58
ya que no lo he hecho, pues vamos a ver qué pasa. Dice, ¿cómo se llama 01:10:02
la cocina? Es la cocina primavera, vamos a llamarla. 01:10:08
La cocina primavera tiene, vamos a decir que no tiene frigoríficos de momento. 01:10:19
Fijaros, he puesto un System of Print LN aquí, que decía que no lo iba a poner. 01:10:23
Y dice, dime el número de placas de primavera. Decimos que no tiene tampoco placas. 01:10:29
Bueno, y de momento, este primer mensaje parece que ha salido como esperábamos. 01:10:34
A ver, ahora, en cambio, la cocina otoño tiene un frigorífico. 01:10:40
Y la marca del frigorífico es Fagor. 01:10:46
y tiene una placa 01:10:49
entonces le dicen 01:10:53
Toño tiene un frigorífico de marca Fagor 01:10:56
nos hemos comido un i 01:10:58
que había en el otro sitio pero bueno sería cuestión 01:11:01
de ponerlo en el texto justo antes del 01:11:02
del tiene y tiene 01:11:04
una placa de color verde 01:11:06
la verano 01:11:08
resulta que tiene tres 01:11:13
frigoríficos de marca Fagor 01:11:16
Zanussi 01:11:18
y vos 01:11:21
y va a tener tres placas también, pues nada, no sale bien 01:11:23
fijaros este espacio, nos falta el i, aquí justo no lo he separado y aquí 01:11:29
hay un espacio de más, bueno, pues sería cosa que podríamos manejar 01:11:34
ahí dentro del código, y vamos a hacer 01:11:38
alguna prueba con la combinación de que tenga frigoríficos y no tenga 01:11:42
placas y de que tenga placas y no tenga frigoríficos, la invierno 01:11:46
pues esta si va a tener frigoríficos, vamos a decir que tiene dos frigoríficos 01:11:54
Zagor 01:12:02
y Zanussi 01:12:04
no sé si Zanussi es con dos S ahora mismo 01:12:06
pero bueno, y cero placas 01:12:09
parece que le va 01:12:11
y luego 01:12:13
vamos a crear una 01:12:19
cocina para nosotros, para Adam 01:12:21
que no tenga frigoríficos 01:12:23
y en cambio tiene seis placas 01:12:25
uno, dos, tres 01:12:27
cuatro, cinco, seis, el random también 01:12:30
funciona, hay variedad aquí de colores 01:12:31
y dice que no tiene frigoríficos por aquí. 01:12:34
Bueno, pues parece que en general funciona el programa. 01:12:38
Con algún pequeño ajuste por aquí. 01:12:42
Aquí habría que poner un y no tiene frigoríficos. 01:12:47
No, y no tiene frigoríficos, no sé, y no tiene placas, perdón. 01:13:02
Ah, pues y no tiene placas. 01:13:09
¿No ha salido la i antes? No sé. 01:13:11
Y placas, este de aquí. Y placas de colores. 01:13:15
Bueno, había un espacio por ahí también. No vale la pena mucho enredar con esto. ¿Alguna preguntilla tenéis? ¿Más o menos se entiende bien todo el desarrollo? ¿No? ¿Todo bien? ¿Seguís por ahí, verdad? Vale, pues nada, la tarea esta la dejamos ya cerrada. 01:13:17
si queréis 01:13:52
un ratito más 01:13:54
porque todavía son menos cuarto 01:13:56
si no tenéis ninguna pregunta 01:13:58
de esto en general 01:14:00
pues si queréis podemos 01:14:02
plantear un poco 01:14:04
el ejercicio, no sé los que estuvisteis 01:14:06
de vosotros, algunos 01:14:09
que estuvisteis, de los que estáis 01:14:10
en la tutoría, si queréis podemos 01:14:12
plantear un poco, por ejemplo, el segundo ejercicio 01:14:14
que había 01:14:17
para desarrollar que 01:14:19
se recibía un array de personas me parece o el primero de ellos que entre un número había que 01:14:20
buscar aquellos que era múltiplo de 7 y que terminaban en 4 alguno de esos podemos hacer 01:14:25
si queréis y con eso ya hacemos un ratito más y terminamos la tutoría si no te si no tenéis nada 01:14:33
así en particular que queráis ver bueno vamos a hacer eso vamos a utilizar este proyecto mismo 01:14:41
lo borro directamente 01:14:52
bueno, lo mantengo 01:15:06
por si acaso queremos retomar el ejercicio 01:15:09
en algún momento 01:15:11
bueno, pues 01:15:12
uno de los ejercicios planteaba 01:15:15
pedir números 01:15:17
era pedir números 01:15:20
hasta 01:15:23
no me acuerdo 01:15:23
cómo era el enunciado, la verdad 01:15:26
entre dos 01:15:27
determinados valores 01:15:30
bueno, pero eso era muy fácil, yo creo 01:15:31
un ejercicio pedía 01:15:33
acumular el valor 01:15:36
de números que estuvieran entre un rango o algo así 01:15:40
había que hacer un método, me parece recordar 01:15:44
vamos a definir aquí un método, por ejemplo, y si no es justo el del examen 01:15:47
es que no me acuerdo exactamente del enunciado, pues algo parecido y ya está 01:15:56
vamos a llamarlo método 01:15:59
y que reciba int 01:16:02
y val uno 01:16:06
int y val dos 01:16:08
que no devuelva nada 01:16:13
yo creo que he borrado cosas de más 01:16:21
es que he borrado el main 01:16:30
lo he comentado 01:16:32
ahí está 01:16:49
bueno entonces vamos a definir 01:16:50
lo static también 01:16:53
y vamos a llamar al método 01:16:54
con dos valores 01:16:57
luego hacemos variantes si es necesario 01:16:58
Entonces uno de los ejercicios pedía que sacáramos el resultado de sumar valores comprendidos entre estos dos, que fuesen o bien múltiplo de un número, vamos a poner 7, o que terminase en 4, algo así. 01:17:15
Pues lógicamente lo primero que tenemos que hacer es, bueno, pues vamos a definir una variable donde ir guardando el resultado final. 01:17:47
El enunciado, yo leyéndolo me daba la impresión de que podía dar la interpretación de que o bien terminar de hacer un resultado para los que terminasen en 4 y otro resultado para los que terminasen en 7 o que simultáneamente tuviera que cumplir los dos valores. 01:17:56
como él me parecía que estaba un poquito ambiguo el denunciado pues a los que lo habéis planteado 01:18:15
de una forma me lo he puesto como bien y en los que lo habéis planteado de otra forma pues también 01:18:20
como bien al final el trabajo en la algoritmia con el programa era muy parecido y bueno pues 01:18:24
era un poco lo que buscaba no entonces bueno pues mirad podemos definir una variable una 01:18:29
variable resultado digamos que vale 0 y esta palabra va a ser donde vamos a ir acumulando 01:18:36
pues en los vamos a ir sumando aquellos valores que estén comprendidos entre estos dos y que y 01:18:44
que cumplan esta condición como vamos a recorrer todo ello pues podemos definir un bucle que 01:18:52
típicamente inicializamos los for lo hemos hecho por aquí para los arrays entre voy a tener que 01:19:00
quitar todo esto, porque si no, no me va a permitir ejecutarlo. 01:19:10
Lo solemos inicializar desde cero, en este caso 01:19:16
como queremos ir desde este valor 01:19:19
mientras i sea menor que el valor definitivo 01:19:20
aquí vamos a ir entre estos dos valores 01:19:25
justo, que es una de las cosas que nos pide 01:19:27
y como queremos recorrer todos ellos, pues le hacemos 01:19:30
un i++. Y ahora, bueno, pues tenemos que buscar 01:19:33
la condición de que o bien sea 01:19:41
múltiplo de 7 o bien termine en 0. 01:19:44
Entonces la forma de comprobar si un número es múltiplo de otro, pues es dividir entre ese número y en lugar de fijarnos en el resultado de la división, pues no vamos al resto. Si el resto es cero, pues resulta que es que efectivamente ese número es divisible por el que estamos dividiendo. 01:19:47
entonces podríamos coger y decir if 01:20:05
sí, y en particular con el que estemos trabajando ahora 01:20:08
tanto por ciento, que es el que nos da el resto 01:20:12
siete, claro esto no va a dar un número y aquí necesitamos 01:20:15
una condición que se pueda evaluar como verdadera o falsa 01:20:20
entonces, si esto resulta que es igual a cero 01:20:23
quiere decir que este número, el que estamos 01:20:28
con el que estamos trabajando en esta iteración del for, es divisible entre 7. 01:20:35
Entonces podríamos coger y decir aquí result, es igual a result más i. 01:20:42
Bueno, aquí lo tendríamos si es divisible entre 7. 01:20:56
Y para ver si termina en 4, pues lo que podríamos hacer es, 01:21:03
Entonces la forma más rápida que se me ocurre a mí es muy parecida a esta, ¿verdad? Poner aquí un else if y lo que podemos hacer es sacar el resto pero dividirlo por 10. 01:21:07
entonces el resto si es igual a 4 01:21:25
pues quiere decir que el número con el que estamos trabajando es un 4 01:21:28
si el i en este caso vale 34 01:21:32
pues al dividir entre 10 nos quedará 3 01:21:36
y el resto 4, esto como nos devuelve el resto 01:21:40
si resulta que el resto ha sido igual a 4, pues resulta que ese número termina en 4 01:21:44
de la forma yo creo más rápida 01:21:48
luego hay alternativas, ahora después de hacer esta 01:21:52
intentamos probar alguna otra, bueno, en este caso también 01:21:55
le sumaríamos esto, fijaros aquí lo que estamos haciendo es 01:22:02
poner, con las dos alternativas 01:22:06
estas denunciado que os decía, estamos acumulando el resultado 01:22:10
tanto si es divisible por 7 como si 01:22:13
termina en 4, en ambos casos lo que hacemos es acumular 01:22:18
el valor que tenga ahí en esta 01:22:22
iteración del for al resultado. 01:22:24
Se lo sumamos. Si por el 01:22:26
contrario decidiésemos que es que tiene que 01:22:29
cumplir las dos condiciones, porque así lo 01:22:31
interpretamos del enunciado, pues entonces habría que poner 01:22:33
un if 01:22:35
de este tipo. 01:22:36
Si el número 01:22:39
es divisible por 7 01:22:40
y termina en 4, 01:22:42
en ese caso sería cuando 01:22:55
acumularíamos el resultado. 01:22:56
En este caso tendrían que ser las dos condiciones 01:22:58
simultáneas. Ya os digo, depende 01:23:00
de cómo se interpreta el enunciado a la hora de leerlo. 01:23:02
Estas son las dos simultáneas y en esta una u otra. 01:23:06
Si resulta que no es divisible por 7 ni termina en 4, 01:23:11
pues nada, no se ejecuta ni el if ni el else, 01:23:15
con lo cual no se acumula nada por aquí, 01:23:17
y no se acumula nada, pues ya está. 01:23:20
Y luego el método, si queremos que saque por pantalla el resultado, 01:23:23
pues una vez acabado el for 01:23:27
pues podríamos hacer aquí un system.out.println 01:23:30
o que terminen 01:23:34
en 4 entre 01:23:50
si alguien pregunta que no entiende para qué estamos acumulando 01:23:54
porque ha denunciado 01:24:06
que estamos planteando para el ejercicio que igual no era justo 01:24:08
el del examen pero el que estoy planteando yo a la hora de hacerlo 01:24:12
aquí es que el resultado a sacar 01:24:15
sea la suma de todos los números comprendidos entre estos dos 01:24:18
y que cumplan esta condición. 01:24:29
Entonces, para que sea la suma, al principio es 0 01:24:33
y luego ya vamos acumulando el número que toca al resultado 01:24:36
para que con todo acumulado termine saliendo por aquí. 01:24:40
Vale, pues entonces sería la suma de los números divisibles por 7 y por 4. 01:24:48
Bueno, esto es para adornar el resultado que quede un poquito más acorde a lo que dice el enunciado. 01:24:52
Entre, y ponemos, y, ponemos aquí, es, y ahora ya por fin ponemos lo que de verdad es el resultado. 01:24:59
Es aquí el irresol. 01:25:24
Aquí me falta un más y, bueno, pues vamos a hacer una ejecución. 01:25:25
dice los números, entre 4 y 100 es, bueno, pues nos da este número 01:25:33
que en principio no lo tenemos que creer, vamos a hacer una llamada 01:25:41
con unos números que se pueda calcular, por ejemplo, vamos a poner 01:25:45
entre 3, que aparece el 4, y entre 8, con lo cual tenemos un 4 01:25:50
y tenemos el 7, 7 más 4, 11 debería dar de resultado, yo creo esto. 01:25:57
Bueno, pues nos dice el 11. Vamos a poner entre 3 y 14. El 14 es divisible por 7 y además termina en 4. Entonces tendríamos el 4, tendríamos el 7 y el 14. 01:26:02
4, 7 y 14, entonces sería 14 más 4, 18 más 7 01:26:27
yo creo que debería dar 25, vamos a ver, pues no 01:26:31
es 11, debería dar el 4, el 7 01:26:37
ah vale, bien, ya sé lo que ha pasado 01:26:50
lo que ha pasado es que aquí le he puesto la condición 01:26:55
de que i sea menor que i val 2, con lo cual como he puesto menor 01:26:59
no está considerando el 14, se ha quedado en el 13 01:27:04
tendré que poner aquí que sea menor o igual para que considere 01:27:07
para que este lo opere 01:27:12
vamos a ejecutar, efectivamente 25 01:27:16
entiendo que en entornos, la asignatura, no sé si la habéis 01:27:22
cursado ya, hay un momento en el que se hacen las pruebas de caja blanca 01:27:27
pruebas de caja negra, una serie de cosas ahí, y dentro de las pruebas 01:27:32
hay que decidir qué valores probar, entonces entre los que 01:27:37
se suelen probar, siempre hay que mirar los números límite. 01:27:40
Entonces, si la ejecución la hacemos a 14, pues uno de los valores 01:27:45
a probar sería aquí, o sea, utilizar la prueba 01:27:48
14 porque es un valor límite de los que cumplen la condición. 01:27:52
Bueno, pues ya está, mirad, aquí ha salido este. Y si 01:27:58
tuviéramos la otra consideración que habíamos dicho, que tengan que ser 01:28:01
de forma simultánea las dos cosas, pues justo con estos datos 01:28:05
el 14 vale para los dos, entonces podríamos poner aquí if 01:28:10
vamos a comprobar que también funciona eso 01:28:14
si es igual a 7 y and 01:28:17
la otra condición está, pues acumulamos 01:28:28
en este caso, en este caso ya se tienen que dar las dos condiciones 01:28:40
para que se acumule, entonces si se tienen que dar las dos condiciones 01:28:44
con estos datos, el 4 que está entre el camino 01:28:47
del 3 y el 14 cumple que acaba en 4 pero no es divisible entre 7 01:28:52
el 7 es divisible entre 7 pero no acaba en 4 01:28:56
entonces el único valor que sería correcto sería el 14, entonces con esta nueva condición 01:29:00
es de esperar que el resultado que nos salga es en lugar de 25 01:29:04
14, efectivamente por aquí nos da los 01:29:08
y nada, pues esto era uno de los ejercicios que pedíamos 01:29:12
fijaros que al final 01:29:23
pues es esto 01:29:26
en lo que consiste el ejercicio 01:29:27
también es cierto que hay que caer 01:29:30
y estáis ahora entrenando pero que 01:29:32
cuando a veces os dábamos 01:29:34
poco espacio 01:29:36
ahí en el folio 01:29:38
en realidad se resolvía 01:29:39
pedía el método, incluso este que es un poquito 01:29:41
más largo, bueno pues 01:29:44
se resolvía en este trocito 01:29:48
si, vamos a 01:29:50
repasarlo, si queréis más o menos 01:30:13
como más o menos me acuerdo yo que no estará 01:30:14
muy lejos de como era el enunciado 01:30:16
Vamos a definir una clase Persona, y en esta clase Persona ponemos dos atributos. 01:30:20
No me acuerdo, era int dni, vamos a poner el dni como un número, y luego int edad, int y dni. 01:30:33
Entonces resulta que había un método que recibía un array de personas y un número. 01:30:47
static, vamos a llamar al método 01:31:03
por ejemplo per 01:31:09
yo creo que el enunciado venía a decir algo como que se recibía un array 01:31:10
y había que mostrar algo así como el valor 01:31:35
también acumulado de las edades que tenían todas las personas 01:31:40
cuyo DNI acabase en un determinado valor 01:31:43
vamos a poner inum, entonces fijaros que 01:31:47
las personas tienen un dni y una edad es esto lo que lo que se pide es este desarrollo que 01:31:58
en algún momento le llegará el array y el número en algún sitio habría construido un array o sea 01:32:07
definir aquí una rey persona de personas igual año persona o sea a dimensionar el array por 01:32:13
ejemplo con tres personas y ahora para cada una de las tres personas vamos a darle uno de unos 01:32:27
determinados valores esto no tenéis que hacer tenéis que hacer esta parte ya se recibía la 01:32:33
raíz y el número pero bueno para la ejecución pues es necesario también hacer esta parte para 01:32:39
la ejecución aquí dentro del ide entonces cogemos y ponemos a arpear la posición 0 aquí podríamos 01:32:44
hacer un bucle, ¿verdad? Pero bueno, no nos enredamos con eso ahora, persona 01:32:51
lo construimos y decimos que 01:32:55
arp0.idni, vamos a decir que 01:33:02
tiene el dni 14, el número sería 01:33:05
no es un dni real, pero bueno, para persona 1 01:33:09
y vamos a poner un nombre también, no, es una edad 01:33:13
arp0.iedad 01:33:17
punto, y edad, yo que sé, que deciros, pues que tiene de edad 10 años, como hemos dimensionado esto para 3, vamos a dar valores a 3 personas, voy a ponerle 24, para que el DNI coincida el último número, que es la condición que dice el enunciado, vamos a decir edad 11, esta, segunda persona, y luego la tercera de las personas, este lo vamos a poner diferente, vamos a hacer que su DNI no acabe en 4, vamos a hacer coincidir el último número del DNI de 2 de ellas, 01:33:23
Y de una no, luego si acaso lo cambiamos, ¿vale? Y hacemos diferentes pruebas con diferentes valores. Y este que tenga una edad de 12. Y lo que vamos a hacer va a ser llamar a este método, ver, le vamos a pasar el array y el número que queremos que valide como último del DNI para, como criterio para acumular las edades. 01:34:05
entonces he aprovechado para poner 01:34:42
este de 14 y este de 24 para que 01:34:44
dos acaben en 4 y ahora vamos a 01:34:46
hacer una primera ejecución aquí 01:34:48
diciéndole que el número que queremos que se utilice 01:34:49
sea el 4 01:34:52
a ver 01:34:53
¿por qué no me compila esto? 01:34:55
vale, es que he puesto aquí 01:35:21
que recibe una persona 01:35:22
y no una raíz de personas, ¿veis? 01:35:24
le estoy pasando una raíz de personas 01:35:27
y aquí le he dicho 01:35:28
oye, mira, el primer parámetro es una persona 01:35:30
y lo que recibe es un array de personas. 01:35:33
Ahora ya me compila. 01:35:36
Pues nada, entonces aquí, independientemente de que esta llamada 01:35:39
se está haciendo con este array y un 4, 01:35:43
podría ser con cualquier array de personas y con cualquier otro número, 01:35:46
ahora trabajamos en el método para dar solución 01:35:49
a lo que tiene que gestionarse dentro de ese método 01:35:51
y estos datos para probar que efectivamente luego funciona el método. 01:35:55
Luego le damos variantes. 01:36:00
entonces lo que nos venía a decir el ejercicio es 01:36:01
vamos a acumular las edades de aquellas personas cuyo 01:36:05
DNI termine en 4, pues algo parecido a esto 01:36:08
a la hora de acumular, cogemos y decimos int 01:36:11
y result 01:36:14
igual a 0, vamos a acumular, bueno result vamos a poner 01:36:16
edad, o suma edad 01:36:20
para que tenga un dato, inicialmente todavía no 01:36:23
hemos comprobado ninguna persona, pues la edad acumulada 01:36:26
será de cero. Esto lo que recibe es una referencia de este array de personas. 01:36:29
Este array de personas, cuando hicimos su new, pues ya hubo una reserva de memoria 01:36:39
y luego para cada una de las personas tiene su reserva de memoria. 01:36:43
Entonces, esto estará apuntando a la misma posición de memoria al pasarlo por aquí 01:36:46
que esta otra. Entonces, el array de personas que está recibiendo aquí 01:36:50
ya tiene su espacio de memoria reservado con ciertos datos, porque es una posición 01:36:54
de memoria en particular porque se hizo esa reserva por aquí con lo cual aquí podemos trabajar con el 01:36:58
array de personas y en esta ejecución en particular teniendo en cuenta que los datos son estos y en 01:37:06
otra ejecución en particular definiríamos otro array de personas posiblemente dimensionado con 01:37:12
un tamaño diferente y con otros datos distintos con lo cual ese otro array de personas sería el 01:37:16
que al que apuntaría esta variable local al método per entonces para recorrer cada una de las personas 01:37:21
¿Cómo lo hacemos con el array? Pues con un bucle for int i igual a cero. Mientras i sea menor que el tamaño, porque queremos recorrer todas las personas, que es su longitud, hacemos un i más más. 01:37:29
para cada... Fijaros, esto es un array de personas, ¿verdad? 01:37:46
Esto es una persona, lo que estamos comentando. 01:37:59
¿Y qué queremos comprobar? Como esto está dentro de un bucle 01:38:03
recorriendo todo el array, en cada una de las ejecuciones esto iterará para una de las 01:38:07
personas en particular de ese array. Y lo que queremos 01:38:11
comprobar es si su DNI justo termina en este 01:38:15
número. Lo hemos hecho aquí. Fijaros. 01:38:19
Entonces podemos decir, if punto idni es igual, perdón, módulo 10, si esto es igual a el número que recibo aquí, ¿qué es lo que hago? Pues acumulo edades. 01:38:24
entonces el y suma edad será igual a lo que ya lleva acumulado hasta ese momento más la edad de 01:38:53
la persona está en particular como esto lo recuerdo para cada una de las personas aquellas que cumplan 01:39:03
esta condición es decir que su último dígito en el dni coincida con el parámetro este que está 01:39:14
recibiendo veis aquí la condición esa del if en ese caso acumulamos la edad y luego que nos queda 01:39:21
hacer después del for cuando hayamos recorrido todas las personas vamos a dar un poco el 01:39:28
resultado como siempre de las edades de las personas cuyo dni termina en es pues está aquí 01:39:48
lo tenemos entonces ejecutamos por aquí vamos a ver si de verdad funciona fijaros que la ejecución 01:40:20
la estamos haciendo, ahora modificamos en alguna otra ejecución 01:40:27
los datos, cargamos el array este de personas 01:40:29
y decimos que compruebe 01:40:33
como último dígito del DNI 01:40:35
que sea un 4, entonces ese criterio lo cumple 01:40:38
tanto esta como esta, pero esta no, que es 22 01:40:41
y las edades son 10 y 11 01:40:44
con lo cual es previsible que el resultado que nos dé 01:40:47
si el código lo hemos puesto bien, si no pues habrá que depurar 01:40:50
sea 10 más 11, 21 01:40:53
entonces le damos aquí a la ejecución y aquí nos lleva 01:40:55
que es 21, ¿veis? 01:40:57
si hacemos una ejecución 01:41:00
en lugar de decir 14 y 24 01:41:01
que el DNI acabe en 2 01:41:03
pues como es 01:41:05
solamente esta 01:41:07
la que lo cumple, pues es de esperar 01:41:08
que nos diga que la edad es 01:41:11
12, ahí lo tenéis 01:41:13
si decimos que sea en 3 01:41:15
pues nos tendría que decir que es 0 01:41:19
porque ahora mismo ningún DNI está acabando en 3 01:41:20
pues nos dice que es 0 01:41:23
y bueno pues 01:41:25
vamos a poner aquí 34 01:41:28
y vamos a decir que compruebe el 4 01:41:30
para que se cumplan todas ellas 01:41:32
con lo cual sería 10, 21 01:41:35
23, 33 01:41:39
entonces el código 01:41:41
pues sería este 01:41:47
el que pedíamos ahí 01:41:50
que bueno ya veis que 01:41:53
bueno pues si que es 01:41:57
que no digo yo que sea fácil 01:41:58
que estáis ahora aprendiendo, bueno, algunos lo habéis hecho bien, pues yo que sé, se ve que tenéis 01:42:00
destreza ya con Java, por lo que habéis aprendido, por el bagaje que tengáis anterior 01:42:04
y los que estáis ahora sobre todo arrancando más con Java, pues 01:42:08
pues cuesta a lo mejor llegar a la conclusión de plantearlo así 01:42:12
pero lo que quiero deciros es que no, en principio pues no pedimos 01:42:16
grandes cantidades de código ahí para que os tengáis que volver locos 01:42:20
ya veis que en realidad se resolvía con 10 líneas de código 01:42:24
con las dificultades que tiene 01:42:28
y bueno, pues eso, que estéis entrenando 01:42:31
para saber hacer 01:42:32
todo esto. ¿Lo veis? 01:42:34
Sí. Vale. 01:42:42
Vale. Sí. 01:42:44
Bueno, pues 01:42:46
pues nada, yo creo que ya no os voy a contar 01:42:47
nada más. Ya estamos en las siete y cuarto 01:42:49
a no ser que tengáis alguna duda por ahí. 01:42:51
Os he puesto, a los que os habéis presentado 01:42:53
os he puesto las notas ya ahí en el aula virtual 01:42:56
bueno, pues echarle un ojo 01:42:58
y he pensado que mejor que 01:42:59
cerrar un día que sé que andáis con trabajo 01:43:01
y os resulta mejor 01:43:04
complicado venir en un momento en particular 01:43:05
pues lo dejo abierto 01:43:08
a cualquier lunes, si alguien quiere ver 01:43:10
su examen cualquier lunes 01:43:11
luego claro, esto tiene el inconveniente de que sí 01:43:13
que es cierto que tenéis que cerrar conmigo 01:43:15
cuando vais a venir, porque yo 01:43:17
en principio mi jornada de trabajo es por la 01:43:19
mañana, solo vengo a daros la tutoría 01:43:21
y en cuanto acabo me marcho a casa 01:43:23
entonces a ver si alguien se va a pegar un viaje desde lejos 01:43:25
va a llegar aquí y ya no me va a pillar 01:43:27
entonces quien quiera ver su examen 01:43:29
me lo decís y justo al terminar la tutoría 01:43:31
quedamos 01:43:34
uno o dos, los que sean, este lunes 01:43:35
el siguiente, me da igual cuando sea 01:43:38
o si uno no puede, os digo, este no puedo, a ver al siguiente 01:43:40
que lo concretamos, es decir, lo tenemos que concretar 01:43:42
y nada, os paséis 01:43:44
a verlo cuando queráis 01:43:46
vuestro examen si queréis 01:43:47
nada, nada, sobre 10, sobre 10 01:43:49
sí, sí, sí, sí 01:43:59
sí, sí 01:44:00
que conste que me di cuenta 01:44:01
y digo, va, voy a poner la aclaración 01:44:04
Luego se me pasó, pero no, no, es sobre 10, sobre 10, sí, sí. 01:44:06
Sí, no tiene nada que ver una nota en particular si es sobre 10 o si es sobre 100, nada que ver, sí, sí, no, sobre 10. 01:44:11
Y nada, pues nada, si no tenéis nada que consultarme, pues aquí cerramos ya, por hoy, la semana que viene más. 01:44:21
La semana que viene repasamos cosas del tema 7, ¿sí? 01:44:30
pues nada, venga 01:44:37
como siempre os subo 01:44:39
la clase al aula por si la queréis 01:44:43
volver a echar un ojo en algún momento 01:44:45
venga, buena tarde, hasta luego 01:44:46
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:
18
Fecha:
17 de febrero de 2025 - 19:21
Visibilidad:
Clave
Centro:
IES ALONSO DE AVELLANEDA
Duración:
1h′ 44′ 49″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
226.60 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid