Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 29-09-23 - 1 - 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:
El otro día entonces finalizamos la clase, os quedasteis haciendo este primer ejemplito, ¿vale? Este primer ejemplito de programa en Java.
00:00:02
Bueno, pues ahora mismo, ahora mismo, situación en la cual las cosas no tienen por qué salirnos de corrido, ¿no?
00:00:14
Porque estamos todavía, pues aprendiendo a organizar nuestra cabeza y a ordenar nuestro pensamiento, ¿vale?
00:00:24
Si ordenamos nuestro pensamiento, nuestro programa nos quedará ordenado y finito, que así tiene que ser un programa, ¿verdad? Profe, dime. 3.250.920. O sea, hay millones de maneras. No sé, no entiendo la pregunta.
00:00:32
Yo dije, hay tres formas de hacerlo
00:00:54
Yo no dije, hay tres formas de hacerlo
00:01:03
No dije eso, lo que diría
00:01:04
Por ahí que está diciendo, le dije
00:01:06
Hombre, a ver, lo puedes hacer de esta otra manera
00:01:09
Pero como alternativa a la que estaba él usando
00:01:10
Eso mismo lo podía hacer de otra manera
00:01:13
Pero una misma cosa en programación
00:01:14
Se podía hacer de miles de cosas distintas
00:01:17
¿Vale?
00:01:19
No es que esto no es matemático, hay una solución
00:01:20
Aquí, en informática
00:01:23
En el desarrollo, ya lo hemos dicho
00:01:25
otras veces no hay una forma buena de hacer las cosas, una misma aplicación se puede
00:01:27
plantear con mil diseños distintos, mil formas diferentes, lo que pasa es que si seguimos
00:01:32
unas prácticas de programación más o menos estandarizadas, pues nuestros programas serán
00:01:36
más eficientes, más legibles, que es lo que perseguimos cuando programamos.
00:01:42
Bueno, pues entonces, más o menos esquema de pensamiento que uno podría haber utilizado
00:01:46
para plantear esto? A ver, primero uno tiene que tener muy claro, fase de análisis, fase de análisis es, ¿qué tiene que hacer el programa?
00:01:55
¿Cuál tiene que ser su resultado? ¿Qué tiene que hacer? Entonces de este enunciado automáticamente extraemos, a ver, lo que este programa va a hacer
00:02:08
va a ser mostrar un número, pero eso me tiene que quedar claro, el resultado final del programa, lo que tiene que hacer, lo que el usuario va a ver
00:02:16
Y lo que nos interesa es que el programa muestre un número
00:02:25
Eso es lo primero que tenemos que tener claro en la cabeza
00:02:28
Entonces nuestro programa
00:02:30
En algún momento tendrá que terminar
00:02:31
Con algo así
00:02:34
Mostrando ahí un número
00:02:35
Y para mostrar un número
00:02:39
Lo que tenemos que mostrar es una variable que guarde ese número
00:02:40
Hasta ahí está claro
00:02:44
Si queremos mostrar un número
00:02:46
Porque ese es el resultado final del programa
00:02:47
Ahí es hasta donde tenemos que llegar
00:02:49
Tenemos que llegar a que el programa me muestre un número
00:02:51
Porque después de haberle enunciado varias veces, después de leerlo, ya me doy cuenta de que su objetivo final es hacer esto, es mostrar un número.
00:02:53
Vale, a partir de ahí uno ya va empezando a tirar.
00:03:04
Bueno, mostrar un número significa, ¿qué número?
00:03:07
Depende, depende de los datos de entrada, por supuesto.
00:03:11
Entonces, como el número que yo vaya a mostrar depende de los datos de entrada, el objetivo no es, muéstrame el número 7.
00:03:15
Si en la aplicación fuera
00:03:21
Muéstrame el número 7
00:03:23
Pues ala, obviamente estaría muy fácil
00:03:24
Ya está, ya te he mostrado el número 7
00:03:26
Pero es que este programa no me dice
00:03:28
Muéstrame el número 7
00:03:30
Me dice muéstrame un número
00:03:31
Y claro, ese número
00:03:33
Leyendo el resto de enunciado
00:03:35
Vemos que ese número es variable
00:03:36
O sea, dependerá de los datos
00:03:38
A veces será uno, a veces será otro
00:03:39
Dependerá de los datos de entrada
00:03:41
Entonces este System.out.println
00:03:43
Me tendrá que mostrar
00:03:45
El contenido de una variable
00:03:47
me tendrá que mostrar el contenido
00:03:49
de una variable, vale
00:03:51
luego este es el punto final
00:03:53
vale
00:03:54
entonces
00:03:56
cuando penséis un programa
00:03:58
antes de empezar a programar
00:04:01
hay que leerlo entero
00:04:03
y ya
00:04:05
verlo en su conjunto antes de empezar
00:04:06
a escribir, no vale que uno
00:04:09
haga, programa que solicite y lea
00:04:11
dos números y no se que, y ya automáticamente se puede programar
00:04:13
vale, solicito y leo dos números, ahora que tengo
00:04:15
que hacer, y luego haga no sé qué
00:04:17
ah vale, ahora hago no sé qué, no
00:04:19
porque para saber ese no sé qué, tengo que tener entendido
00:04:21
todo lo siguiente, entonces primero
00:04:23
varias, este
00:04:25
enunciado es muy sencillo, claro, pero bueno
00:04:27
hay enunciados, habrá enunciados
00:04:29
lógicamente, más largos
00:04:31
y las aplicaciones ya en general
00:04:33
tienen enunciados muy largos
00:04:35
entonces, primer paso imprescindible
00:04:36
que lo leamos entero una y otra vez
00:04:39
hasta que entendamos el conjunto
00:04:41
de su funcionamiento
00:04:43
y yo no me pongo a escribir ni una sola línea de código
00:04:44
hasta que no he entendido el conjunto del funcionamiento
00:04:47
y que va a ocurrir
00:04:49
que cuando yo escriba esas líneas de código
00:04:51
casi seguro que las escribo del final para atrás
00:04:53
y las voy escribiendo
00:04:55
como veremos cuando veamos estructuras
00:04:57
pues primero hago un esqueleto con cajas negras
00:04:58
y luego voy rellenando las cajas negras
00:05:01
así es como iremos escribiendo el código
00:05:03
porque así es como vamos pensando
00:05:05
¿vale? vamos pensando
00:05:06
de lo general a lo concreto
00:05:09
¿vale? uno piensa
00:05:11
yo me voy a Francia, muy bien
00:05:13
Ese es el pensamiento general, me voy a Francia
00:05:14
Ahora ya empiezo a detallarlo
00:05:16
Vale, compro el billete de avión
00:05:18
Voy al aeropuerto, me monto el avión y aterrizo
00:05:21
Vale, pues ya
00:05:23
Esa caja negra ya la he detallado un poquito más
00:05:24
Ahora tiene tres cajas negras, compro el billete de avión
00:05:26
Me toca detallarla, ah vale
00:05:29
Busco en páginas
00:05:30
De agencias de viajes, etc
00:05:32
Pues ese pensamiento de lo general
00:05:34
A lo concreto
00:05:37
Refinando, es el mismo pensamiento
00:05:38
Que tenemos que llevar cuando programamos
00:05:41
y para llevar ese pensamiento tenemos que tener entendido muy bien el funcionamiento general de la aplicación
00:05:42
antes de empezar a programar nada, no sé que el resultado final de un programa
00:05:47
sea una secuencia de sentencias ordenada, no significa que nuestro pensamiento vaya en secuencia ordenado
00:05:53
no va a ir nunca así, no puede ir así, nuestro pensamiento tiene que ir en iteraciones que van refinando
00:06:01
de forma progresiva
00:06:07
vale, yo me planteo el programa
00:06:09
general, y para eso he leído
00:06:11
muy bien enunciado, vale, tengo que
00:06:13
hacer esto, ahora voy separando en partes
00:06:15
en tareas, esas partes ahora
00:06:17
se quedan todavía sin refinar
00:06:19
ahora ya me voy metiendo en cada una de ellas
00:06:21
las voy refinando, así hasta que construyo
00:06:23
un primer boceto del programa
00:06:25
y cuando tengo ese primer boceto
00:06:26
lo miro a ver más o menos si vale
00:06:28
tiene sentido o no, y empiezo a hacer las pruebas
00:06:31
vale, pero así es como
00:06:34
pensamos, bueno pues entonces
00:06:35
después de analizar
00:06:37
todo esto, hemos llegado a la conclusión
00:06:40
de que el destino final de mi código
00:06:42
es hacer esto, mostrar un número
00:06:43
y mostrar un número que es variable
00:06:46
que depende de los datos de entrada
00:06:47
luego mi sistema de println tendría que estar mostrando
00:06:49
una variable, no hay tutía, porque la variable
00:06:51
es la estructura de programación
00:06:53
que me permite guardar cosas
00:06:55
variables, como su nombre indica
00:06:57
vale, pues entonces yo tendré que tener
00:06:59
de alguna manera una variable
00:07:02
para guardar ese resultado final
00:07:04
una variable para guardarla, ¿no?
00:07:07
entonces, ese es el objetivo final de mi programa
00:07:09
mostrar un resultado
00:07:11
vale, hasta ahí está claro
00:07:12
ahora ya tengo que empezar a meterme en esta caja negra de aquí
00:07:14
que es, vale, ¿y cómo hago yo
00:07:17
para darle valor a n?
00:07:19
¿cómo hago yo para darle valor a n?
00:07:21
vale, porque ese es el problema
00:07:23
ahora, el problema ahora es este
00:07:25
es decir, a ver, si voy a mostrar
00:07:27
el contenido de mi
00:07:29
para empezar a
00:07:31
Bueno, a dar nombres de variables con un poco más de sentido
00:07:32
En lugar del n famoso, vamos a llamarlo resultado
00:07:35
¿Vale? Mucho más bonito
00:07:37
Vamos a llamarlo resultado
00:07:41
Bueno, pues ese es el objetivo, ¿no?
00:07:42
Mostrar el resultado
00:07:47
Entonces, para mostrar el resultado voy a necesitar
00:07:48
Hacer una asignación
00:07:52
Obviamente
00:07:54
Si no hago una asignación
00:07:55
No puedo mostrar
00:07:57
Entonces, este es el meollo del asunto
00:07:59
¿cómo saco yo el valor que tengo que mostrar?
00:08:02
¿qué es lo que me pide el programa?
00:08:06
pues traigo un valor
00:08:08
vale, pues ahora sigo refinando y sigo analizando el enunciado
00:08:08
me dice, anda pues tendrás que pedir dos valores
00:08:12
y asignar a resultado el que sea mayor de los dos
00:08:15
entonces ahora ya el programa empieza a cobrar más sentido
00:08:20
porque ya tenemos una primera estructura
00:08:23
tenemos una primera estructura
00:08:25
sabemos que tenemos que mostrar una variable
00:08:27
Y a esta variable habrá que darle un valor. Y este es lo complicado. ¿Y qué valor le doy? Pues es cuando vienen las siguientes lecturas que nos permiten ir acotando. Las siguientes lecturas nos dicen, oye, lee dos números y dale el mayor de los dos.
00:08:30
Vale, ya lo tengo un poco más claro, voy a leer los dos números, ahora ya sí me pongo a escribir los dos números y ahora ya pienso qué tipo de asignación hago para asignar a este el mayor de los dos, porque eso es lo que tengo que hacer y ya está, y programa finiquitado, ¿vale?
00:08:47
Pero insisto, no se lee y se va haciendo lo que el enunciado te dice
00:09:04
Eso nunca, no tiene ningún sentido
00:09:09
Se lee todo en conjunto, se entiende, se piensa, se analiza
00:09:10
Y luego ya se va programando, no de arriba a abajo
00:09:15
Se va programando de abajo a arriba
00:09:21
De cajas según vaya yo dando las sucesivas iteraciones
00:09:23
Que me van conduciendo al resultado final
00:09:28
Bueno, pues entonces, ahora ya leer los datos
00:09:30
Ya tengo que hacer y sé cómo hacerlo
00:09:35
Porque hemos aprendido ya a leer números enteros del teclado
00:09:38
Bueno, pues como hemos aprendido a leer números enteros del teclado
00:09:43
Eso lo podemos hacer ya sin pensar
00:09:48
Ahora ya es la parte en la cual
00:09:50
Aquí uno no tiene que perder ni medio segundo
00:09:51
Porque ya él memorizó en su cabeza
00:09:54
que leer del teclado es tan fácil
00:09:58
como crear una variable de tipo objeto
00:10:00
y usar las
00:10:02
sentencias que os dije, entonces como ya está en la cabeza
00:10:04
ahí el segundo
00:10:06
que se pierde es cero
00:10:08
no se pierde tiempo
00:10:10
si uno no almacena
00:10:11
las cosas en la cabeza, entonces ni siquiera
00:10:16
sabe de que recursos dispone, no los
00:10:18
tiene a mano para sacarlos de ahí
00:10:20
entonces si no los tiene a mano para sacarlos de ahí
00:10:21
es que construir el programa va a ser una locura
00:10:23
¿vale? porque uno tiene que decidir
00:10:25
qué ladrillos usar, y para decidir
00:10:28
qué ladrillos usar, toda esa caja de ladrillos
00:10:30
tiene que estar aquí, y luego ya nos ponemos
00:10:32
a ordenarla, esa caja de ladrillos no puede
00:10:34
estar en Google, en Internet, ni en nada
00:10:35
bueno, pues como me han dicho, leer por teclado
00:10:37
así yo sé perfectamente cómo es por teclado
00:10:39
pues venga, leer por teclado
00:10:41
entonces, declarábamos
00:10:43
una variable que yo llamé
00:10:46
objeto, aún sin entender lo que significa
00:10:48
la variable objeto, y os dije, os lo tenéis que creer
00:10:49
ahora, no hay más remedio, pues nada
00:10:52
lo creéis, y esto lo hacíamos
00:10:53
de esta manera
00:10:55
lo hacíamos así, eso implicaba que teníamos que poner esta línea aquí y ahora ya leer dos números enteros con esta variable que me permite leerlo, vale, si yo voy a leer dos números enteros, necesito dos espacios en memoria para guardarlos, lógicamente, bueno, pues entonces ya me viene la siguiente vuelta para arriba,
00:10:56
Venga, pues voy a declarar dos variables enteras más
00:11:29
Para guardar esos dos numeritos
00:11:32
Dato uno
00:11:34
Dato dos
00:11:36
Ala
00:11:38
Vale, ahora ya tengo
00:11:39
Estas dos cajitas para los dos números
00:11:42
Que voy a leer, ahora ya los leo
00:11:44
Porque ya sé perfectamente que lo tengo en la memoria
00:11:45
Como sobre un lato, entonces todo eso tiene que estar
00:11:47
Nadie puede hacer una pregunta
00:11:49
Porque ha puesto mal esta sentencia
00:11:51
Y le da error y porque nadie
00:11:53
Debería hacer una pregunta de esas, porque ya
00:11:55
tiene todo el mundo que saber como se lee
00:11:57
del teclado con escáner
00:11:59
bueno
00:12:00
y lo hacíamos así ¿verdad?
00:12:02
poníamos aquí la variable con el nombre
00:12:05
que nos hubiera dado la gana ponerle
00:12:07
y poníamos
00:12:09
esta llamada
00:12:11
y ya sabíamos que esto lo que
00:12:12
hacía era quedarse esperando un
00:12:15
dato y mandarlo a la variable que le
00:12:17
dijéramos, para que el programa no fuera
00:12:19
tan desagradable
00:12:21
para el usuario y diera información
00:12:23
pues solíamos poner un mensajito
00:12:25
donde le decíamos introduzca
00:12:28
el primer número
00:12:30
no pongo tildes a propósito
00:12:35
porque no en la consola
00:12:38
la codificación que tiene me las pone feas
00:12:40
vale
00:12:42
ahora introduzca el segundo número
00:12:44
vale pues ya tenemos esta parte
00:12:46
que es la más fácil
00:13:04
leer por teclado
00:13:05
como ya nos sabemos de memoria
00:13:06
como leer por teclado
00:13:08
esta parte ya la tenemos
00:13:09
y ahora nos queda este agujero negro de aquí
00:13:10
nos queda este agujero negro
00:13:13
que este agujero negro es
00:13:15
a ver
00:13:18
lo que yo tengo que mostrar
00:13:18
porque mi objetivo final en este código
00:13:20
es esto, es mostrar esto
00:13:23
lo que yo tengo que mostrar
00:13:25
tiene que recibir un valor
00:13:27
que depende
00:13:28
el valor que reciba de si este
00:13:31
es mayor que este
00:13:33
o de si este es mayor que este
00:13:34
luego automáticamente como yo ya me lo he estudiado todo
00:13:36
y lo tengo en la cabeza y sé que existe
00:13:39
una asignación condicionada
00:13:41
pues me doy cuenta de que lo que me estoy
00:13:42
diciendo es exactamente
00:13:45
la definición de asignación condicionada
00:13:47
que hemos estudiado y que tenéis ahí
00:13:49
grabada
00:13:51
la definición de asignación condicionada
00:13:51
es una asignación
00:13:55
en la cual tú puedes dar
00:13:57
dos valores
00:13:59
o uno
00:14:00
u otro
00:14:03
y esos dos valores
00:14:06
y tú darás uno u otro en función de una condición que pongas ahí.
00:14:08
Entonces eso ya lo sabemos, de nuevo está en nuestra memoria.
00:14:15
Entonces justo el problema que se nos plantea con esta asignación
00:14:18
automáticamente conectamos y nos damos cuenta de que nos lo resuelve esa asignación.
00:14:21
Si eso no está en la memoria nuestra, sino que está en Google,
00:14:26
pues aquí nos hemos plantado y estamos 3 horas, 4 horas tratando de resolver el ejercicio.
00:14:30
pero si está nuestra cabeza grabado
00:14:34
automáticamente hacemos la conexión y decimos, claro
00:14:37
si yo al resultado
00:14:38
le tengo que asignar dato 1 o dato 2
00:14:40
es decir, uno de los dos
00:14:43
en función de si dato 1 es mayor que dato 2
00:14:44
o no, pues justo
00:14:47
me estoy diciendo la definición de asignación
00:14:49
condicionada, justo me estoy diciendo eso
00:14:51
pues ya está, tiro de ese recurso
00:14:53
y lo pongo
00:14:55
¿vale? bueno, pues lo vamos a cascar tal cual
00:14:56
el recurso era, a esta variable
00:14:59
resultado, o le doy dato 1
00:15:01
o le doy dato 2
00:15:03
y en función
00:15:05
de qué condición
00:15:11
le doy o dato 1 o dato 2
00:15:12
pues en función de si dato 1
00:15:15
es mayor que dato 2 o no
00:15:17
o sea, las condiciones
00:15:19
o se cumplen o no se cumplen
00:15:20
¿vale?
00:15:23
entonces, esa condición
00:15:25
dato 1 ser mayor que dato 2
00:15:26
es una condición sencilla
00:15:28
que sabemos expresar
00:15:30
porque el mayor que, menor que
00:15:32
esos dos solamente
00:15:34
luego hay muchos más operadores relacionales que ya veremos
00:15:36
pero el mayor que y el menor que
00:15:38
los podemos usar desde ya
00:15:40
porque son operadores con los que estamos familiarizados
00:15:42
que hemos usado toda la vida
00:15:44
entonces
00:15:45
si dato 1
00:15:47
es mayor que dato 2
00:15:50
esta es la condición que yo quiero expresar
00:15:52
¿vale? y entonces este operador
00:15:55
el mayor que y el menor que
00:15:56
un operador relacional
00:15:58
lo podemos usar siempre
00:15:59
con variables numéricas, está claro
00:16:02
porque los números tienen un orden natural
00:16:04
y Java si orden natural lo respeta
00:16:05
¿vale? entonces
00:16:08
que nos quede ya desde ya
00:16:09
está
00:16:11
este conocimiento
00:16:13
el conocimiento de que las variables numéricas
00:16:14
sean float
00:16:18
sean enteras, sean decimales
00:16:19
sean enteras, las podemos comparar
00:16:22
con el operador relacional mayor que y menor que
00:16:24
que nos quede desde ya
00:16:25
hay más operadores
00:16:27
relacionales pero
00:16:29
ya cuando nos centremos ya en
00:16:31
ver todos los operadores que tenemos, ya lo veremos
00:16:33
bueno, pues ya está, ya he terminado
00:16:36
ya he terminado el programa
00:16:37
y como veis, no he programado en línea
00:16:39
no, en línea no
00:16:42
he ido saltando de arriba a abajo
00:16:43
¿vale? según me he ido aproximando
00:16:45
a la solución, ¿vale?
00:16:47
luego, primera conclusión, así es como tenéis que programar
00:16:49
entendiendo
00:16:52
todo en
00:16:54
en conjunto el funcionamiento
00:16:55
lo que pide el ejercicio
00:16:58
para lo cual
00:17:00
se lee una, dos, tres veces
00:17:01
las veces que haga falta
00:17:04
y si después de leerlo tres, cuatro, cinco veces
00:17:05
las veces que haga falta
00:17:08
sigue sin estar claro lo que pide
00:17:09
pues puede ocurrir que el enunciado
00:17:12
esté un poco afortunado
00:17:14
esté mal escrito
00:17:16
pues en ese caso habrá que pedirle cuentas
00:17:17
a quien haya escrito ese enunciado
00:17:20
y decirle, haberlo leído siete veces
00:17:22
y no entiendo lo que quieres decir
00:17:24
bueno
00:17:26
pues una vez que ya se ha entendido
00:17:27
lo que se quiere decir, se ha leído 6, 7, 8 veces
00:17:29
ahora ya empieza esta otra parte
00:17:32
que es, a ver, ¿cuál es el objetivo final?
00:17:35
este, ¿cómo lo puedo ir construyendo?
00:17:38
pues voy usando los ladrillos que tengo en mi cabeza
00:17:40
no en otro sitio, que los tengo todos ahí
00:17:43
todos los que hemos visto hasta ahora tienen que estar ahí
00:17:45
hemos usado el ladrillo de leer por teclado
00:17:48
que lo tenemos en la cabeza
00:17:50
hemos usado el ladrillo de la asignación condicional
00:17:51
que lo tenemos en la cabeza
00:17:54
por supuesto el de cómo mostrar por consola
00:17:55
el de cómo declarar variables
00:17:58
si para hacer algo de esto
00:18:00
hemos necesitado mirar en Google
00:18:02
o algo, es que tenemos
00:18:05
que estudiar más historia
00:18:07
más codos, hay que estudiar más
00:18:08
más codos, ¿vale?
00:18:11
habrá situaciones
00:18:14
en las cuales sí, o sea, hay pequeños espacios
00:18:15
de conocimiento que uno sabe, ah, vale
00:18:17
con esto se puede hacer esto
00:18:19
pero los detalles no tiene sentido
00:18:20
memorizarlos, pues entonces ya, yo almaceno
00:18:22
en mi cabeza que tengo esta herramienta para
00:18:25
hacer esto y cuando la necesite
00:18:27
ya si busco los detalles a lo mejor
00:18:29
en internet o en la documentación
00:18:30
pero hasta ahora todo lo que hemos visto aquí
00:18:32
es no
00:18:35
lo podemos tener todo en la cabeza y no pasa nada
00:18:35
bueno pues
00:18:40
entonces esto conduciría al primer
00:18:42
boceto de mi ejercicio, al primer boceto
00:18:44
ahora ya es
00:18:46
cuando yo ya sobre el escrito
00:18:48
pues empiezo a mirarlo, a pensarlo
00:18:50
a ver si, uy se me ha escapado
00:18:53
esta cosita, cuando
00:18:54
lo tenga más o menos claro hacer pruebas
00:18:56
etcétera, ya me pongo, ya está
00:18:58
pero ya tengo un primer boceto del ejercicio
00:19:00
y además sin errores de compilación
00:19:02
y sobre él ya, pues puedo detectar a lo mejor
00:19:04
cosas que no he tenido en cuenta, etcétera
00:19:06
¿vale?
00:19:09
pero bueno, esto que hemos
00:19:11
hecho a todo el mundo le suena con sentido, ¿no?
00:19:12
bueno, se ha quedado claro
00:19:18
claro, claro, claro
00:19:19
como tenéis que pensar
00:19:20
luego ya cada uno obviamente tiene sus propios
00:19:22
mecanismos, sus propias formas de programar
00:19:24
y
00:19:27
Y luego cada uno obviamente tiene
00:19:27
Más o menos experiencia en programación
00:19:31
O incluso ninguna
00:19:33
¿Vale?
00:19:35
Yo, mi punto de partida
00:19:37
O sea
00:19:39
Mi clase es para los que no tienen
00:19:41
Ni idea de programación
00:19:43
¿Vale? Para los que no tienen ni idea
00:19:45
Porque esa es la responsabilidad nuestra
00:19:47
Los que sepan más
00:19:50
Pues maravilloso
00:19:52
Porque les
00:19:52
lo tendrán, vamos, le será
00:19:53
todo más cómodo
00:19:56
bueno, pues entonces ahora estamos en la fase
00:19:58
de mirar esto un poquito y decir, vale, esto
00:20:00
que he hecho tiene sentido, tiene buena pinta
00:20:02
podríamos empezar a sacarle peros
00:20:03
¿alguien le sacaría
00:20:06
algún pero a este código
00:20:08
de aquí? seguro que sí, ¿verdad?
00:20:10
¿a qué alguien le podría sacar algún pero?
00:20:13
al funcionamiento
00:20:19
¿alguien se pone ahora ya? nosotros le damos
00:20:20
este código, le damos este código al cliente
00:20:22
que nos ha pedido esa aplicación
00:20:24
y el cliente se pone a usarlo
00:20:25
y es probable que el cliente
00:20:27
en algún momento nos dé un toque y nos diga
00:20:29
uuuh, oye, es que no me está
00:20:31
no es exactamente el funcionamiento
00:20:33
completo y correcto, ¿qué pero me podría
00:20:35
sacar el cliente?
00:20:37
efectivamente
00:20:43
efectivamente, el cliente le puede decir
00:20:44
oye, si meto dos números iguales
00:20:46
entonces yo ahora pienso y digo, anda, claro
00:20:48
es que si meto dos números iguales
00:20:50
esta condición es
00:20:53
falsa, obviamente
00:20:55
entonces al ser falsa
00:20:56
asigna el dato 2
00:20:58
entonces si meto dos números iguales
00:20:59
el programa siempre me muestra el segundo
00:21:02
¿verdad?
00:21:04
entonces hombre, ese es un funcionamiento
00:21:06
subóptimo, otra cosa es que yo le diga
00:21:08
al cliente, oye te echo un programa
00:21:10
en el que si los dos son iguales te muestra el segundo
00:21:12
¿eso te vale?
00:21:14
porque vas a introducir dos datos iguales
00:21:16
alguna vez, ¿eso te importa? ¿no te importa?
00:21:18
y si le importa
00:21:21
pues habrá que arreglarlo
00:21:22
¿vale? si le importa habrá que arreglarlo
00:21:24
arreglarlo, entonces hombre
00:21:27
aquí podríamos empezar a refinar
00:21:28
anidando condiciones, etc
00:21:30
ahora mismo es lo que menos me importa
00:21:32
pero podríamos
00:21:34
empezar a hacerlo, pero bueno
00:21:36
está claro, por lo que tiene claro
00:21:40
que este programa, si los dos son iguales
00:21:43
en ese caso de prueba, me daría el segundo
00:21:45
entonces antes de
00:21:47
entregárselo al cliente, uno habría
00:21:49
probado este código
00:21:51
y lo habría probado dando
00:21:52
datos concretos, que eso es lo que se llama
00:21:55
casos de prueba, conjuntos de datos concretos
00:21:57
y viendo lo que da, a ver si tiene sentido o no
00:21:59
esas pruebas no las hemos
00:22:01
hecho nosotros, vamos a hacerlas
00:22:03
vale, vamos a hacer un caso de prueba
00:22:05
en el cual el primero
00:22:08
es mayor que el segundo
00:22:10
vale, este caso de prueba lo ha pasado con éxito
00:22:12
ha funcionado
00:22:15
vamos a hacer otro caso de prueba
00:22:16
en el cual el primero
00:22:19
es menor
00:22:21
que el segundo
00:22:23
que es el opuesto que he metido antes
00:22:25
vale, este caso de prueba lo ha pasado
00:22:27
vale, entonces si uno
00:22:30
es un buen tester y hace
00:22:32
un buen conjunto
00:22:34
de casos de prueba, habría
00:22:36
metido ese otro
00:22:38
habría metido ese otro caso de prueba, habría dicho
00:22:39
vale, y si yo meto dos números iguales
00:22:42
me muestra el segundo
00:22:44
entonces
00:22:47
esto le puede importar al cliente o no
00:22:49
repito, le puede importar, a lo mejor el cliente me dice
00:22:51
Está bien, está bien porque el mayor de los dos es los dos, es lo mismo, vale, está bien, puede decir sí, sí, vale, me vale.
00:22:54
O puede pedirnos, no, si son iguales, pues entonces tienes que mostrarme otra cosa, tienes que mostrarme otra cosa.
00:23:05
Entonces aquí ya sí que tendríamos que empezar a refinar esto.
00:23:14
Y se complicaría, porque si son iguales, entonces yo aquí, mi sentencia final no es un system out que muestra un numerito, sino que mi sentencia final sería, muestra un mensaje, son iguales.
00:23:19
entonces esto ya con las herramientas que tenemos
00:23:33
hasta ahora, no podemos
00:23:36
incluirlo, no podemos incluirlo
00:23:38
tendríamos aquí ya que sí que meter un if
00:23:40
porque esto ya no es una asignación
00:23:42
condicionada, yo no puedo meter al
00:23:44
resultado que es un entero
00:23:46
meterle una cadena
00:23:48
son iguales y que entonces
00:23:50
resultado me muestre o el número
00:23:52
o me muestre la cadena son iguales que contiene
00:23:54
no, esa variable solo puede tener números
00:23:56
entonces
00:23:58
con las herramientas
00:23:59
conocemos hasta ahora, ese refinado
00:24:02
no podríamos hacerle
00:24:04
¿vale? pero
00:24:06
en cuanto ya incorporemos el
00:24:08
if, que me permite hacer un conjunto
00:24:10
de sentencias o hacer otro en función
00:24:12
de la condición, pues ya está
00:24:14
podríamos modificar ese
00:24:16
esa
00:24:18
este pequeño mal funcionamiento
00:24:21
si es que al cliente le parece mal
00:24:25
funcionamiento ¿vale?
00:24:26
¿vale? ¿alguna duda
00:24:29
pregunta o algo similar?
00:24:32
nada de nada
00:24:34
todo está claro
00:24:36
¿habéis estudiado en casa
00:24:40
las tres tardes que teníais?
00:24:41
solo ha contestado uno
00:24:46
¿quién ha contestado?
00:24:47
al que menos creo, fíjate
00:24:48
si has estudiado, ¿no?
00:24:50
vale, y los demás no contestan
00:24:53
pues porque normalmente las preguntas que hacen
00:24:55
los profesores no se contestan
00:24:56
bueno, era una pregunta retórica
00:24:58
asumo que lo hayáis hecho
00:25:01
vale
00:25:02
Antes de que sigáis haciendo algún ejercicio más y todo eso, unos pequeños matices más para poder ir haciendo programas un pelinín más sofisticados.
00:25:04
Bueno, a la hora de hacer asignaciones, esto me va a quedar así un poco feo, vale, estábamos con variables y asignaciones a variables, ¿verdad?
00:25:18
Ese ha sido todo nuestro rollo hasta ahora, variables y asignaciones a variables.
00:25:31
Y para asignar valores a variables, habíamos usado algunos operadores, pero algunos muy básicos.
00:25:35
Los aritméticos, más menos multiplicación y división, siempre los podéis usar con su significado natural que conocéis.
00:25:44
Siempre los podéis usar con variables numéricas, sin ningún problema, ¿verdad? Los aritméticos.
00:25:52
Y luego además, es lo único que hemos incorporado en realidad para construir expresiones que operen con variables.
00:25:57
y luego además este, menor que, mayor que
00:26:02
para comparar
00:26:05
números y
00:26:07
de esa manera obtener condiciones
00:26:09
¿vale?
00:26:11
y las condiciones que peculiaridad tienen
00:26:13
que se pueden asignar a variables
00:26:15
boolean
00:26:17
¿no? entonces en relación a lo que
00:26:18
preguntabas tú, ¿de cuánta
00:26:21
forma se puede hacer este programa?
00:26:22
hombre, como se puede hacer de tropecientas
00:26:25
siempre y cuando haga esto, por ejemplo
00:26:26
por ejemplo
00:26:28
esto es una condición
00:26:29
luego al ser una condición
00:26:32
se puede asignar a una variable boolean
00:26:33
entonces a lo mejor
00:26:36
a mi me resulta más fácil
00:26:38
meter esa condición
00:26:40
en una variable boolean intermedia
00:26:41
por ejemplo la variable boolean
00:26:43
que la llamo así
00:26:48
y a esta variable boolean
00:26:49
le asigno
00:26:52
esta condición
00:26:53
y esta es una condición
00:26:56
perfectamente bien hecha
00:26:58
porque compara con este operador relacional
00:27:00
dos numeritos, es una condición muy bien hecha
00:27:02
su valor será true o false
00:27:04
y ese valor va a parar
00:27:06
cae a una variable booleana
00:27:08
que las variables booleanas solo pueden recibir
00:27:10
verdad o mentira, resultados de evaluar
00:27:12
condiciones, es lo único que pueden recibir
00:27:14
o cascarle a capón true o false
00:27:16
bueno, pues entonces si yo me hago
00:27:19
una variable booleana intermedia, pues hombre
00:27:22
entonces puedo poner
00:27:24
esto aquí
00:27:26
que era lo que estábamos comentando ahí
00:27:27
el martes
00:27:32
entonces lo que es el código
00:27:34
el código luego se puede poner de mil formas
00:27:36
distintas, se puede poner de mil maneras
00:27:38
¿vale? entonces
00:27:40
lo que yo he hecho antes, lo que tenía escrito antes
00:27:42
y esto es lo mismo
00:27:44
en realidad, es lo mismo
00:27:47
lo que pasa es que con esto uso una variable
00:27:48
intermedia
00:27:51
que el único efecto
00:27:52
podría ser en este caso
00:27:54
que a lo mejor el código quede más claro
00:27:56
porque
00:27:58
en este caso esta condición es fácil
00:28:00
sencilla, pero hay veces que la condición
00:28:02
a poner aquí es una condición muy grande
00:28:04
entonces poner ahí una pedazo de condición
00:28:06
pues a lo mejor me hace perder ya un poco
00:28:08
la estética del programa
00:28:09
entonces ponerlo con una
00:28:11
booleana intermedia pues a lo mejor hace que
00:28:14
la estética, la elegibilidad
00:28:16
del código sea un poquito mejor
00:28:18
y como esto podría yo poner
00:28:19
obviamente mil
00:28:22
pequeños cambios en el código
00:28:23
por ejemplo, podría
00:28:26
declarar a la vez que
00:28:28
inicializo, ¿vale? digo
00:28:30
oye, voy a quitar esto de aquí, venga, y lo declaro a la vez, y así no tengo tanto lío de líneas, bueno, pues otro cambio de código que podría hacer,
00:28:31
¿verdad?, recordad que a la vez que damos el primer valor a una variable, a la vez que le damos el primer valor, yo ya la puedo declarar en ese momento,
00:28:40
que es la, bueno, pues otro pequeño cambio que puedo hacer, en lugar de declararla, dejarla asignada, y luego asignarle, puedo declararla y a la vez asignarle su primer valor,
00:28:48
pues si quiero, y así esta línea se hace más cortita
00:28:58
¿vale? entonces este primer valor que yo asigno
00:29:02
me da igual que sea un valor fijo 3, 7
00:29:06
o lo que yo quiera, siempre y cuando sea un valor, y esto es un valor, lo que pasa es que ese valor
00:29:10
no se va a resolver hasta que alguien ponga un número en el teclado
00:29:14
y ese número caiga en dato 1, ¿vale? entonces cambios en el código
00:29:18
pues muchas, muchas combinaciones, bueno este no tiene muchas líneas
00:29:22
un mismo código que hace lo mismo
00:29:26
se puede escribir de muchas maneras
00:29:28
y la idea es que sea
00:29:31
lo más legible posible
00:29:33
para el que no lo ha hecho lo vea
00:29:35
lo entienda, no vea ahí líneas enormes
00:29:36
que no sabe de donde han salido
00:29:39
que le cuesta ligarlas con otra
00:29:40
vale
00:29:42
bueno, pues a ver
00:29:44
estamos con asignaciones de variables
00:29:48
vamos a ponerlo aquí en
00:29:55
esto estaba
00:29:57
en la esta de ejercicio
00:29:59
voy a hacer otra clase que sea
00:30:07
ejemplo con cadenas
00:30:12
para incorporar
00:30:14
ejemplos con
00:30:17
cadenas
00:30:22
ah no, un proyecto no, perdón, una clase
00:30:24
clase ejemplos
00:30:31
con cadenas
00:30:40
vale, pues venga, vamos a ver
00:30:43
bueno, pues variables, tipos de variables
00:30:53
que hemos visto
00:31:09
tipos de variables primitivos, ya de nuevo los tenemos
00:31:10
también todos en la cabeza, números enteros
00:31:13
by, short, int y long, depende de lo grandote
00:31:15
que quiero que sea el número
00:31:17
números decimales, float y double
00:31:18
dependiendo de la precisión
00:31:20
en la cantidad de cifras decimales
00:31:22
booleano, si quiero guardar una condición
00:31:25
o algo que es true o false
00:31:27
y char si quiero guardar un único carácter
00:31:28
con los matices que vimos
00:31:31
en la asignación, que si yo asigno
00:31:33
algo a un char
00:31:35
cuando si doy un número
00:31:36
para java es lo mismo
00:31:39
lo busca en la tabla y ya está
00:31:41
entonces si java ve que ahí necesita
00:31:42
tiene un hueco para un char
00:31:45
y le estamos dando un número, no le molesta
00:31:47
no le molesta porque coge ese número, se va a la tabla
00:31:49
y lo sustituye por el carácter correspondiente
00:31:51
si le damos el carácter directamente entre comillas simple
00:31:53
pues se lo ponemos más fácil, da un poco igual
00:31:55
esos eran los matices que estábamos viendo
00:31:57
vale, bueno pues
00:31:59
obviamente esas variables
00:32:01
se quedan cortas
00:32:04
y por eso aparecen las variables objeto
00:32:05
en las que ya nos detendremos durante mucho tiempo
00:32:07
para aprender a construirlas
00:32:10
pero desde ya, desde ya
00:32:12
vamos a necesitar
00:32:14
un tipo de variable adicional
00:32:15
a estos tipos primitivos que hemos visto
00:32:17
porque desde ya, desde ya
00:32:19
es que lo estamos usando, de hecho lo estamos usando
00:32:21
a veces incluso sin saber como se llama
00:32:24
que son las cadenas
00:32:26
de caracteres enteras, vale, o sea
00:32:28
un char solo me guarda un carácter
00:32:30
yo con un carácter no hago nada, con un carácter
00:32:32
yo no puedo guardar un nombre, no puedo guardar
00:32:34
una descripción, en un carácter no puedo guardar
00:32:36
nada, tendría que tener un montón de char para cada carácter
00:32:38
de ese nombre, es una locura
00:32:40
entonces, desde ya
00:32:42
desde ya, aun sin entender
00:32:44
algunas de las cosas que implica, desde ya
00:32:46
vamos a tener que usar variables
00:32:48
que sirvan para guardarme
00:32:50
cadenas de caracteres
00:32:52
enteras, no solo un carácter
00:32:54
Bueno, pues ese tipo de dato, ¿cómo se llama?
00:32:56
Ese tipo de dato se llama así, como uno podría imaginar, con la S mayúscula, ¿vale?
00:33:01
Con la S mayúscula, no con la S minúscula, con la S mayúscula.
00:33:08
Entonces, si yo declaro un dato de este tipo, porque yo sé que va a contener una cadena de caracteres,
00:33:14
Lo declaró de tipo string
00:33:22
Y ahora cadena sirve para contener
00:33:24
Toda una cadena de caracteres
00:33:27
¿Vale?
00:33:29
Porque su tipo es string
00:33:31
Entonces ya apreciamos
00:33:32
Una primera diferencia
00:33:35
Los tipos primitivos y indavelchar
00:33:36
Todos empezaban con minúscula
00:33:38
Y string
00:33:40
Ya empieza con mayúscula
00:33:42
Eso no es casual
00:33:44
Tiene una razón de ser
00:33:46
Y es que string no es lo que hemos llamado tipo primitivo
00:33:47
Es también como escáner
00:33:50
que Scanner si recordáis también empezaba con mayúscula y no es casual
00:33:52
es un tipo objeto también
00:33:55
entonces que sea un tipo objeto
00:33:58
tiene un montón de implicaciones
00:34:00
que de nuevo ahora mismo no podemos entender
00:34:02
porque no sabemos exactamente que son los objetos
00:34:05
no podemos entenderlo
00:34:07
tiene un montón de implicaciones
00:34:08
esas implicaciones ya las veremos
00:34:10
pero aun sin conocer todas esas implicaciones
00:34:12
podemos usar este tipo de datos
00:34:14
podemos usarlo
00:34:17
podemos hacer un primer uso sencillo
00:34:18
Porque, hombre, nombres y cadenas y textos necesitamos desde ya para mostrar contenidos, para mostrar cosas.
00:34:21
Vale, bueno, pues entonces, a las variables string, ¿qué tipo de valor les asignamos?
00:34:30
Hombre, pues ya lo hemos dicho.
00:34:35
Las variables string están pensadas para recibir cadenas de caracteres, no un solo carácter.
00:34:37
Y las cadenas de caracteres para Java las espera como el texto que sea entre comillas dobles.
00:34:44
a diferencia de un único char que es entre comillas simples
00:34:51
vale
00:34:54
pues esta es una asignación
00:35:02
perfectamente
00:35:04
válida de una cadena de caracteres
00:35:06
porque está entre
00:35:08
comillas dobles
00:35:10
obviamente esto nunca
00:35:11
lo pondría entre comillas simples
00:35:14
porque Java me diría
00:35:15
no, las comillas simples son para
00:35:18
un único char, cuando tú lo asignas a un char
00:35:20
esto como es una cadena
00:35:22
lo pondría entre comillas dobles
00:35:24
vale, entonces bueno
00:35:25
podemos trabajar con este tipo de dato
00:35:30
casi
00:35:32
como si fuera un tipo de dato primitivo
00:35:33
normal, que no lo es
00:35:36
y eso tiene muchas implicaciones
00:35:38
en su uso
00:35:40
pero no las podemos entender ahora, pero para un uso
00:35:40
básico podemos usarlo como si fuera
00:35:44
un tipo de dato primitivo
00:35:46
entonces, que yo quiero mostrar una variable
00:35:47
stream por teclado
00:35:50
por consola
00:35:52
pues como muestro
00:35:54
cualquier otra
00:35:56
la paso al system.out.print.dln
00:35:56
Y ya está, y mostrará el contenido de la variable, y en este caso, pues ha mostrado el contenido de la variable cadena, ¿vale? El contenido de la variable cadena, ¿vale?
00:35:59
esto que nos abre
00:36:15
bueno nos abre
00:36:19
ahora nos abre la pregunta
00:36:21
de igual que yo puedo
00:36:23
operar
00:36:26
con variables primitivas
00:36:28
que hemos visto que podemos operar
00:36:29
con variables numéricas para sumarlas
00:36:31
restarlas
00:36:34
igual que puedo
00:36:35
operar con variables
00:36:37
para hacer expresiones
00:36:39
y esas expresiones asignarlas
00:36:41
puedo operar con cadenas también
00:36:43
para asignar a una variable string
00:36:45
asignar el resultado de una expresión
00:36:49
que involucre cadenas
00:36:51
en realidad también podemos operar con cadenas
00:36:52
pero operar con cadenas
00:36:55
¿qué es la única operación interesante con cadenas?
00:36:56
concatenarlas
00:36:59
vale, concatenarlas
00:37:00
bueno, pues podemos concatenar cadenas
00:37:02
construir una expresión
00:37:04
que sea el resultado de concatenar cadenas
00:37:06
es decir, si aquí declaramos 2
00:37:09
por ejemplo
00:37:13
vale, entonces a la cadena 2
00:37:14
le ponemos un espacio
00:37:29
y yo también
00:37:34
vale
00:37:37
bueno, pues podríamos
00:37:38
por ejemplo hacer algo así
00:37:42
y es
00:37:47
vamos a hacer a la cadena 1
00:37:49
una asignación
00:37:51
a la cadena 1 vamos a hacerle
00:37:52
otra asignación más
00:37:54
otra asignación más
00:37:56
Y esta asignación que sea el resultado de concatenar otras dos cadenas, porque es una operación que podemos hacer perfectamente entre cadenas, concatenar dos cadenas. ¿Y cómo se concatenan? Con el operador más, con el operador más.
00:37:58
entonces yo puedo hacer esto
00:38:14
cadena1
00:38:16
más
00:38:19
cadena2
00:38:20
y esta es una expresión
00:38:22
perfectamente válida en Java
00:38:25
perfectamente válida
00:38:27
esto es una suma
00:38:29
es un operador suma
00:38:31
pero el operador suma cuando trabaja
00:38:32
con operadores que son
00:38:35
cadenas
00:38:37
entonces no funciona
00:38:38
como la suma algebraica que conocemos
00:38:41
sino que funciona como la concatenación
00:38:43
entonces este operador es un operador
00:38:45
que en función de las variables
00:38:48
que le pongamos a los lados
00:38:50
o bien es la suma algebraica
00:38:51
o bien es la concatenación
00:38:54
y eso para Java
00:38:56
es perfectamente distinguible
00:38:58
dice, ah, me has puesto
00:39:00
el operador suma, ¿qué tengo a los lados?
00:39:02
tengo cadenas, ah, vale, pues lo que quieres es que concatene
00:39:04
pues ya está, entonces evalúa
00:39:06
esta expresión y el resultado
00:39:08
de esa expresión será la concatenación
00:39:10
y el resultado va a cadena 1, que es perfectamente compatible
00:39:11
porque como la concatenación de dos cadenas es también una cadena
00:39:16
pues puede ir a cadena 1, que es una cadena
00:39:19
recordad que las asignaciones, el resultado de la expresión
00:39:22
tiene que ser del mismo tipo de la variable a la que asigno
00:39:26
salvo con el matiz de la promoción automática que ya hemos visto
00:39:31
que también tenéis memorizado en la cabeza
00:39:35
vale, entonces si mostramos el resultado de cadena 1 otra vez
00:39:37
cadena 1 aquí
00:39:41
ha quedado pisoteada
00:39:43
el valor que tenía de antes, que era este
00:39:45
ha quedado pisoteado
00:39:47
por el nuevo
00:39:49
¿vale? o sea, para construir el nuevo
00:39:50
hemos usado
00:39:56
el valor que tenía, claro, porque el orden
00:39:58
que sigue la máquina virtual cuando ve una asignación
00:40:00
el orden es
00:40:02
primero, me voy a la derecha
00:40:04
y evalúo la expresión
00:40:06
la evalúo con el valor que tuviera
00:40:08
cadena 1 en ese momento
00:40:10
con el valor que tuviera, ¿cuál tiene?
00:40:11
Este, vale, pues la evalúo.
00:40:14
¿Y cuál tiene cadena 2? Este, vale.
00:40:16
Una vez que ya he construido el valor final, voy y se lo asigno a la variable que hay aquí,
00:40:18
pisando el que tuviera de antes, pisando.
00:40:25
Entonces cadena 1 aquí ha perdido su valor original y se ha quedado con el nuevo.
00:40:27
De hecho, si lo ejecutamos, pues este es el primer valor que tenía cadena 1
00:40:33
y este es el segundo valor con el que se ha quedado después de hacer esta asignación.
00:40:38
vale
00:40:44
entonces podemos hacer
00:40:45
podemos usar cadenas de texto
00:40:50
en nuestros programas
00:40:52
a nivel muy básico
00:40:54
sabiendo estas cosas
00:40:58
y a veces lo necesitamos desde ya
00:40:59
luego string, repito, tiene muchas
00:41:01
implicaciones por debajo
00:41:04
porque es un objeto, entonces tiene muchas cosas
00:41:05
pero esas ya las iremos incorporando
00:41:08
vale
00:41:09
vale, entonces
00:41:11
como somos curiosos
00:41:14
y nos van surgiendo preguntas, ahora diríamos.
00:41:16
Vale, entonces, operador más, ya empezamos a liarla.
00:41:19
Si involucra números, es la suma algebraica, no hay duda,
00:41:23
y el resultado va a un número.
00:41:26
Si involucra cadenas, no hay duda, es la concatenación,
00:41:28
y el resultado es una cadena.
00:41:32
¿Y si involucra un número y una cadena?
00:41:34
¿Se puede? ¿Lo deja Java?
00:41:38
Pues vamos a verlo.
00:41:41
Vamos a declarar ahora un numerito,
00:41:42
y vamos a leerlo por teclado
00:41:44
el numerito
00:41:48
voy a copiar y pegar el escáner este
00:41:50
lo voy a poner aquí arriba
00:41:53
para que no moleste
00:41:59
algo tan feo ahí en medio
00:42:01
y ahora
00:42:02
y este numerito N
00:42:05
vale, ahora paramos
00:42:12
cuando terminemos esto
00:42:17
vale, este numerito N
00:42:18
lo declaro y a la vez que lo declaro
00:42:21
le doy ya su primer valor, lo inicializo
00:42:24
con un valor leído por teclado
00:42:26
O sea, el programa cuando llegue aquí se va a quedar esperando
00:42:27
De nuevo, como es un poco feo
00:42:30
Vamos a ponerle un mensajito antes
00:42:32
Para que el usuario sepa
00:42:34
Que tiene que introducir un número
00:42:35
¿Vale? Por ejemplo así
00:42:38
Vale
00:42:46
Se muestra el mensaje
00:42:48
El programa se queda ahí esperando
00:42:49
Cuando ya hemos metido el numerito, sale el numerito
00:42:50
Y va la variable n
00:42:53
Y ahora ya
00:42:54
Nos podríamos plantear hacer esto
00:42:57
Cadena 1 igual
00:42:58
Vamos a conquetar
00:43:01
El valor leído es
00:43:03
Esto es una cadena
00:43:09
Y la voy a concatenar con un valor entero
00:43:12
Vale, pues Java me ha dejado
00:43:15
Dejarme sin errores de compilación me ha dejado
00:43:19
O sea, me ha dejado usar el operador más
00:43:22
Mezclando tipos
00:43:25
Mezclando la cadena string y mezclando el número
00:43:27
no poniendo solamente dos cadenas como es el caso
00:43:31
o no poniendo solo dos números como hemos hecho hasta ahora
00:43:37
me deja mezclarlos
00:43:40
vale, bueno, pues en el caso de que mezclemos y el operador tenga
00:43:42
a un lado una cadena y a otro lado un número
00:43:47
¿qué es lo que hace Java? dice, ah, pues gana la cadena
00:43:50
siempre gana la cadena, entonces lo que hace Java es
00:43:54
convierte este numerito
00:43:58
a la cadena
00:44:01
que lo representa
00:44:04
si hemos metido 37
00:44:05
lo convierte a la cadena 37
00:44:07
que representa
00:44:09
y ahora ya que tiene la cadena
00:44:10
la concatena con esta
00:44:13
¿vale? luego cuando el operador
00:44:14
más mezcla números y cadenas
00:44:17
la que tiene mayor
00:44:20
peso es la cadena, da igual que esté antes
00:44:21
o que esté después, da igual
00:44:23
aunque yo lo concatene en otro orden
00:44:25
la que tiene mayor peso es la cadena
00:44:27
y lo que hace es, saca el valor de la variable
00:44:29
512
00:44:32
y dice, pues voy a transformarlo
00:44:33
no me queda más remedio, a una cadena
00:44:35
que represente 512
00:44:37
que no es lo mismo
00:44:39
el número binario 512
00:44:41
que está dentro de n
00:44:44
el número binario 512
00:44:45
que la sucesión de caracteres asti 5, 1 y 2
00:44:46
son dos cosas muy distintas
00:44:50
pues esa conversión la hace
00:44:51
la máquina virtual, ahí, porque necesita
00:44:53
una cadena, la necesita, porque la cadena ha ganado
00:44:55
la necesita, pues se va
00:44:57
al número n, saca lo que hay dentro
00:44:59
y obtiene
00:45:01
los caracteres asti que representan
00:45:03
el numerito binario que hay ahí
00:45:06
512, lo que sea
00:45:07
y ahora ya lo concatena, ahora ya que ya lo tiene
00:45:08
convertido en cadena, concatena
00:45:11
y ya
00:45:14
esa concatenación lo asigna
00:45:15
a una variable de tipo compatible
00:45:17
tiene que ser cadena sí o sí
00:45:19
vale, tiene que ser cadena
00:45:21
sí o sí, y ahora ya
00:45:23
si mostramos cadena 1
00:45:25
pues esto nos dirá
00:45:30
el valor leído es
00:45:31
el que hayamos leído
00:45:33
vamos a comprobarlo
00:45:37
vale, me muestra el primero
00:45:40
que teníamos arriba, me muestra el segundo
00:45:45
me muestra el mensaje, efectivamente
00:45:47
se ha quedado esperando, porque aquí no aparece
00:45:49
el terminate de este ni nada
00:45:51
está ahí esperando, el programa no ha acabado, está esperando
00:45:53
vale, le meto un numerito
00:45:55
y ya está
00:45:57
y de eso me informa, el valor leído es
00:45:58
con catena
00:46:01
con la transformación
00:46:02
a cadena de caracteres
00:46:04
de ese número
00:46:07
y luego me muestra esto
00:46:08
luego este primer uso básico de cadenas
00:46:12
ya nos permite hacer programas
00:46:16
un poquito más
00:46:17
un poquito más prácticos
00:46:18
¿vale?
00:46:24
entonces cuidado, no os liéis
00:46:29
que la máquina virtual haya necesitado
00:46:30
convertir esto a cadena
00:46:33
no significa para nada que la variable n
00:46:34
el valor que tenga haya cambiado
00:46:37
no, porque cuando se coge
00:46:38
un valor para construir una expresión
00:46:41
la máquina virtual
00:46:43
va a la variable y saca su valor
00:46:44
saca una copia y la variable se queda ahí
00:46:46
con lo que tenía tan feliz, no la toca
00:46:48
saca una copia de su valor
00:46:50
y hace todo lo que tenga que hacer
00:46:52
para construir el resultado
00:46:54
¿vale?
00:46:55
pero lo que tenía esa variable ahí sigue, no se toca
00:46:58
ese valor no va a cambiar
00:47:01
hasta que no le hagamos una asignación
00:47:02
a ella, hasta que no hagamos un n igual
00:47:04
¿vale?
00:47:06
eso tiene que estar claro, cuando las variables
00:47:08
aparecen en la parte derecha en las expresiones
00:47:10
se coge una copia
00:47:13
de su valor para operar
00:47:14
pero la variable sigue teniendo lo que tuviera y eso no ha
00:47:16
cambiado, el n sigue teniendo
00:47:18
el valor numérico 875
00:47:20
pero la máquina virtual
00:47:21
ha cogido una copia del 875
00:47:23
lo ha transformado en la cadena
00:47:26
de caracteres así 8, 7 y 5
00:47:29
lo ha concatenado
00:47:31
y ha hecho todo eso para obtener un valor
00:47:32
y asignárselo a cadena 1
00:47:34
¿vale?
00:47:36
vale, pues
00:47:39
sí
00:47:40
aquí
00:47:42
sí, a ver, lo puedes poner
00:47:45
como es una declaración de variable más
00:47:49
lo puedes poner en cualquier sitio
00:47:51
antes de usarlo, por supuesto, antes de usarlo
00:47:52
podría haber puesto aquí arriba
00:47:55
pero bueno, es más fácil para no meter
00:47:56
cosas raras en medio, si uno sabe
00:47:59
que va a usar el escáner, lo pones en la primera línea
00:48:01
y ya está
00:48:03
vale, vamos a parar aquí
00:48:04
un momentito entonces
00:48:06
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 13
- Fecha:
- 29 de septiembre de 2023 - 13:39
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 48′ 09″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 919.05 MBytes