20240930 ProgrEstruct-EjerciciosYString - 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:
Gracias por hacer depósitos.
00:00:00
¿Qué?
00:00:01
Gracias por hacer depósitos.
00:00:02
Ah, ¿la veis por hecho que podía no hacerlos?
00:00:05
Sí.
00:00:09
Ah, bueno, no, entonces no los hago.
00:00:10
Yo es que pensaba que era obligatorio.
00:00:11
Pero si existe la opción de no hacerlos...
00:00:13
Bueno, a ver, que yo también lo necesito,
00:00:16
no solo vosotros, así que no os asustéis.
00:00:19
Vale, pues entonces, todo...
00:00:22
Ya.
00:00:25
Todo este rollo último era
00:00:27
para ver que realmente existe una diferencia
00:00:29
entre poner uno y dos
00:00:33
para que no os quedéis como diciendo
00:00:35
pues para que hay dos y hacen lo mismo
00:00:37
pues no hacen exactamente lo mismo
00:00:39
pero repito
00:00:41
la única trascendencia es cuando la segunda expresión
00:00:43
de condición
00:00:47
implica que además se asigne valor a alguien
00:00:48
si implica eso
00:00:52
tiene trascendencia porque ese valor no se asignaría en algunos casos
00:00:53
En los casos en los cuales no haga falta
00:00:57
Evaluar esa condición porque ya sea falsa la primera
00:00:59
Pero en la mayoría
00:01:02
De los casos, que son los casos en los cuales
00:01:04
No trabajamos así
00:01:06
¿No?
00:01:08
Por ejemplo yo aquí
00:01:09
Si descomento esto
00:01:10
Si lo descomento
00:01:13
Aquí entonces ya no necesito
00:01:15
Leer esto
00:01:17
Entonces ahora ya en este caso
00:01:19
Así
00:01:26
Pues en este caso
00:01:32
en el cual me sobra
00:01:34
no, está bien
00:01:36
vale, en este caso
00:01:38
esta
00:01:39
expresión de evaluarla
00:01:41
o no, no hay ninguna diferencia práctica
00:01:44
porque no hay ninguna asignación de variable
00:01:46
escondida dentro, no hay nada
00:01:47
entonces, en este caso
00:01:49
¿por qué pongo el 2?
00:01:51
entonces, por defecto siempre ponemos
00:01:54
dos operadores, porque
00:01:56
ahorras tiempo
00:01:58
pasas de la segunda si no hace falta
00:01:59
pero, cuidado
00:02:02
Cuidado en los casos en los cuales
00:02:04
Esta es de ejecución forzosa
00:02:05
Por lo que sea
00:02:07
Bueno
00:02:08
Este ejercicio está claro
00:02:11
Se supone que nos ha servido
00:02:14
Para acabar de entender
00:02:17
Este operador
00:02:19
Si no lo entendíamos bien
00:02:20
Y además para vislumbrar
00:02:21
Un poquito
00:02:25
La razón de que haya dos versiones
00:02:25
¿Qué más cosas tenemos por aquí?
00:02:28
Este sería
00:02:35
igual pero de tres condiciones
00:02:35
esto podéis hacerlo vosotros
00:02:38
y quien tenga dudas que lo diga
00:02:40
este está claro que sería un or
00:02:44
es lo mismo pero un or
00:02:45
se leen dos notas
00:02:47
y mostrar un mensaje diciendo
00:02:49
si aprobó al menos una de ellas
00:02:52
entonces si la primera nota mayor que 5
00:02:54
o la segunda nota
00:02:56
mayor que 5
00:02:58
entonces aprobó alguna
00:02:59
si no, no
00:03:02
vale, entonces
00:03:02
como muchos de estos ejercicios
00:03:05
son ya
00:03:11
de mostrar mensajes en pantalla
00:03:13
condicionado, estamos ya
00:03:15
estamos ya
00:03:17
usando un montón de veces
00:03:19
esto
00:03:21
que son cadenas de texto
00:03:22
lo estamos usando un montón de veces
00:03:26
ahora mismo lo estamos usando solo
00:03:28
para pasárselo a los
00:03:30
system.out.println para que lo muestren por pantalla
00:03:32
lo estamos usando solo para eso
00:03:34
no vamos a usarlo para nada más
00:03:36
y a veces lo usamos pasándole
00:03:38
dos posibilidades, o uno o el otro
00:03:40
¿vale?
00:03:42
entonces ya estamos empezando efectivamente
00:03:44
a usar un montón
00:03:45
lo que se llama cadena de caracteres
00:03:47
¿verdad? cadenas de caracteres, que son texto
00:03:49
entre comillas dobles
00:03:52
y exclusivamente entre comillas dobles
00:03:53
pero entre comillas simples sería unicochar
00:03:56
¿vale?
00:03:58
bueno, pues entonces, para hacer
00:03:59
los programas un poquito más operativos
00:04:01
y no estar todo el rato arrastrando esto
00:04:03
dentro de un system out, porque es
00:04:05
en un único sitio, de ahora mismo lo podemos usar
00:04:07
pues vamos a introducir
00:04:09
un poquito de otro tipo de
00:04:11
dato, más allá de los
00:04:13
siete primitivos que no sabemos
00:04:15
el byte, el short, el in, el log
00:04:16
el double, el float, el dicho siete
00:04:19
y son ocho, el boolean y el char
00:04:21
esos son los ocho datos
00:04:22
de tipo, los ocho tipos de datos primitivos
00:04:25
que sabemos exactamente
00:04:27
cómo funcionan
00:04:29
pues vamos a
00:04:30
introducir, lo tenéis
00:04:33
en los apuntes de la aula virtual
00:04:35
una pequeña introducción a string
00:04:37
que tenéis ahí, pero vamos, que todo eso son resumencillos
00:04:39
para no perder el hilo
00:04:41
de lo que estamos haciendo, pero no es material de estudio
00:04:43
el estudio es lo que hacemos en clase
00:04:45
y lo que trabajáis en casa
00:04:47
lo que sube a lo virtual
00:04:48
son como pequeñas guías para que sepáis lo que estamos
00:04:50
haciendo, pero no es material para
00:04:53
estudiar para el examen, el examen es estudiar
00:04:55
haciendo ejercicios a lo bestia
00:04:57
vale, bueno, pues entonces
00:04:59
vamos a ver por tanto
00:05:02
Un poquito de un tipo de dato adicional
00:05:08
De cara
00:05:10
A poder hacer los ejercicios
00:05:12
Con un poquito más de
00:05:14
Sí, más que soltura
00:05:16
Más cómodo
00:05:19
Más cómodamente
00:05:23
Más cómodamente
00:05:23
Vale, pues venga
00:05:25
Vámonos, venga, pues no, que estoy del pein
00:05:27
Hasta los cataplines
00:05:30
Así que
00:05:32
Vamos a poner esto
00:05:33
vale, pues vamos a ver
00:05:36
ese tipo de dato adicional
00:05:47
recordad que los tipos de datos
00:05:48
que hemos visto
00:05:50
son estos, que a nadie se les olvide
00:05:52
byte
00:05:54
short
00:05:57
int
00:06:00
y long, esto para números enteros
00:06:01
con diferente
00:06:04
cantidad de bits
00:06:05
float
00:06:07
y double para números reales
00:06:11
con diferente cantidad de cifras decimales
00:06:14
char para un único
00:06:16
carácter
00:06:19
y boolean
00:06:20
para una condición
00:06:23
algo que puede ser
00:06:25
true o false, vale, estos eran los
00:06:27
tipos de datos primitivos
00:06:29
bueno, ya hemos dicho varias
00:06:30
veces que estos tipos de datos
00:06:37
tienen el uso
00:06:38
que tienen, que es números, un char
00:06:41
y una condición, nada más
00:06:43
las aplicaciones suelen trabajar con
00:06:44
cosas un poquito más complejas, con un
00:06:47
cliente que tiene un nombre
00:06:49
o una edad, un DNI
00:06:51
con un equipo informático
00:06:53
que tiene
00:06:55
el identificador
00:06:56
de la placa base, lo que sea. Normalmente
00:06:59
trabajamos con cosas
00:07:01
cuya información no se puede
00:07:02
recoger solo o en un byte o en un
00:07:05
short o en un int.
00:07:07
Bueno, pues para eso existen otros tipos de datos
00:07:08
que no son los primitivos
00:07:11
que son
00:07:13
los tipos de datos objeto.
00:07:15
¿Vale?
00:07:23
entonces los tipos de datos
00:07:23
objeto, hay que hacerlos
00:07:25
hay que fabricarlos, se construyen
00:07:27
hay que fabricarlos, no los trae Java
00:07:29
de serie, los que trae de serie
00:07:31
son los primitivos
00:07:33
los tipos de datos objeto hay que construirlos
00:07:34
no los trae de serie
00:07:37
¿en qué se diferencian los tipos de datos
00:07:37
objetos y los primitivos?
00:07:41
aparte de que hay que construirlos, ya veremos cómo
00:07:43
aparte de que hay que construirlos
00:07:45
se diferencian en la forma de almacenamiento
00:07:46
¿vale?
00:07:49
son varios primitivos
00:07:50
Sí, pero no solo
00:07:55
Por ejemplo, cuando uno declara un tipo primitivo
00:07:58
Por ejemplo, como el empero
00:08:07
En n, ya sabemos lo que eso implica
00:08:09
Para la máquina virtual y para nuestra aplicación
00:08:14
Que automáticamente aparece un espacio en memoria
00:08:16
De 32 bits en este caso
00:08:19
Con un nombrecito n
00:08:20
Bueno, cuando declaramos un tipo objeto
00:08:22
Vamos a suponer que yo he construido ya un tipo objeto
00:08:27
para una variable que quiero que sea una variable
00:08:30
que guarda los datos de un cliente.
00:08:33
Entonces, repito, como los datos de un cliente son muchos,
00:08:36
no me caben en un byte, son muchos,
00:08:39
pues yo construyo, ya veremos cómo,
00:08:42
construyo un nuevo tipo de datos que lo llamo cliente.
00:08:44
Ese sería un nuevo tipo de dato que me he construido yo
00:08:48
y que le he dado el nombre cliente.
00:08:51
Ya veremos cómo se construye.
00:08:53
Entonces, una vez que el tipo de dato está construido,
00:08:56
uno puede ya declarar variables de ese tipo
00:08:58
igual que aquí hemos declarado variable
00:09:00
n de tipo int, pues
00:09:02
podríamos declarar variables
00:09:04
de tipo cliente
00:09:06
por ejemplo, imaginaos que yo
00:09:08
declaro aquí una variable
00:09:10
mi cliente, vale
00:09:12
pues he declarado una variable mi cliente
00:09:15
con el nombre que hay me ha dado la gana
00:09:18
pero su tipo de dato
00:09:19
es un tipo de dato objeto que he construido
00:09:21
yo para que le quepan varias cosas
00:09:24
dentro, etcétera, ya veremos cómo
00:09:25
bueno, pues cuando estamos
00:09:27
declarando esto, la máquina virtual que está haciendo
00:09:30
mi cliente en realidad
00:09:32
esta variable
00:09:34
en realidad
00:09:36
físicamente es una
00:09:38
dirección de memoria, eso es lo que es
00:09:40
es una dirección de memoria RAM
00:09:42
y es
00:09:44
una dirección de memoria
00:09:48
que será la dirección de memoria de algún sitio
00:09:49
de la memoria RAM, de algún sitio, porque es una dirección
00:09:51
de memoria, recordad que
00:09:54
la memoria RAM pues son
00:09:56
todos los espacios, los bytes, cada uno de ellos tiene una dirección asociada.
00:09:57
Pues es una dirección de memoria de un espacio en memoria RAM
00:10:03
donde ahora están ya todos los datos de ese objeto cliente,
00:10:06
los que sean, que pueden ser tropecientos, un montón.
00:10:10
Pues es la primera diferencia entre una variable de un tipo primitivo
00:10:16
y una variable de un tipo construido objeto.
00:10:21
En este caso, la variable es propiamente el dato,
00:10:24
directamente la variable se refiere al espacio de memoria
00:10:27
donde está el dato, el 7, el 8, lo que sea
00:10:30
y en este otro caso
00:10:32
la variable se refiere a una dirección de memoria
00:10:34
y ya esta dirección de memoria
00:10:38
si yo la sigo, ya veremos cómo seguirla
00:10:40
si yo la sigo, ya sí que nos lleva al espacio de la RAM
00:10:42
donde está todo, lo que sea
00:10:46
entonces esa es la primera diferencia
00:10:48
esa diferencia tenemos que
00:10:51
por supuesto ser plenamente consciente de que existe
00:10:55
porque tiene un montón de implicaciones
00:10:58
ahora de la ejecución de un programa
00:11:00
es que esto es un puntero
00:11:01
claro, claro, es que
00:11:05
en la aplicación de entradas de objetos
00:11:07
el antiguo puntero de C
00:11:09
o de otros lenguajes es un objeto
00:11:11
¿vale?
00:11:14
entonces, eso es la primera cosa
00:11:16
que tenemos que tener clara, que es distinto
00:11:18
y luego, y tiene muchas
00:11:20
implicaciones ahora de la ejecución de
00:11:22
un programa, lo que pasa es que
00:11:24
ahora lo programa una vez que no lo tiene claro
00:11:26
pues ya no está todo el rato pensando que eso es una dirección
00:11:27
no lo está pensando, no hace falta
00:11:30
estarlo pensando todo el rato
00:11:32
no puede ya programar con tranquilidad
00:11:33
sin estar todo el rato pensando
00:11:36
que eso es una dirección
00:11:38
a diferencia de los antiguos punteros de C que sí que tenías que tenerlo pendiente
00:11:39
para ponerle delante el simbolito
00:11:42
de sacar la dirección, aquí no, aquí es todo mucho más fácil
00:11:44
claro
00:11:46
pero sí que hay que entender que son distintos
00:11:48
porque a veces nos hay errores de ejecución
00:11:50
y esto
00:11:52
porque es, ah, claro, es que esta variable
00:11:54
ya no es eso, ¿vale?
00:11:56
Bueno, eso por un lado.
00:11:58
Vale, bueno, pues siguiente cosa.
00:12:00
De estos tipos que
00:12:03
construimos, muchísimos
00:12:04
ya están hechos afortunadamente.
00:12:06
Muchos ya están hechos.
00:12:08
¿Y quién los trae? La propia Java
00:12:10
Virtual Machine, la máquina virtual que ejecuta
00:12:12
los programas, ya hemos visto
00:12:14
alguna vez, que trae de serie incorporadas
00:12:16
un montón de punto class
00:12:18
dentro, ¿verdad? Un montón de punto class.
00:12:20
Pues muchos de esos punto class
00:12:22
son tipos de datos ya construidos
00:12:24
que nosotros podemos aprovecharnos
00:12:26
de ellos. Y aparte
00:12:28
podemos hacer los nuestros, que de eso se trata
00:12:30
todo el curso, de hacer nuestros propios tipos de datos
00:12:32
o objetos. Pero hay muchos
00:12:34
que ya vienen hechos y construidos y están
00:12:36
en la máquina virtual y yo los puedo usar.
00:12:38
Vale, pues muchos de ellos
00:12:40
bueno, pues muchos ya están
00:12:42
en la
00:12:48
Java Virtual Machine.
00:12:50
Vale, pues
00:12:53
uno de ellos
00:12:54
uno de ellos lo usamos desde ya
00:12:55
lo tenemos que usar desde ya porque es imprescindible
00:12:57
pues uno de ellos es este tipo
00:12:59
el tipo string
00:13:02
con la S en mayúscula
00:13:05
los objetos siempre suelen ir con la primera mayúscula
00:13:07
sí, eso es justo lo que iba a decir
00:13:12
el nombre del tipo de dato
00:13:14
uno le puede poner el que le dé la gana porque no se lo inventa
00:13:16
pero de nuevo, si seguimos
00:13:19
ciertos estilos de programación
00:13:20
vamos a hacer nuestros programas más legibles
00:13:22
entonces se asume
00:13:24
que cuando te inventas un tipo de dato
00:13:26
nuevo objeto
00:13:29
dale un nombre que empiece en mayúscula
00:13:30
dale un nombre que empiece en mayúscula
00:13:33
porque así el que use
00:13:35
la aplicación, el que vea el código
00:13:36
va a hacer asociaciones mentales más rápidas
00:13:38
va a decir, ah, esto es un tipo de dato construido
00:13:40
es un objeto patatín, entonces respetémoslo
00:13:42
y de hecho en la máquina virtual
00:13:45
pues todos los tipos de objetos construidos
00:13:46
que te dan empiezan con mayúscula
00:13:48
entre ellos el stream
00:13:50
bueno, pues el stream
00:13:52
tiene un uso muy concreto
00:13:55
Vale, pues como podemos sospechar
00:13:56
Por su nombre
00:14:05
¿El string para qué vale?
00:14:06
Para guardar muchos charts
00:14:08
Para eso vale el string
00:14:09
Eso, internamente
00:14:12
Internamente, físicamente
00:14:16
Está almacenado como una raíz de chart
00:14:18
Lo que pasa es que no lo puedes usar como una raíz de chart
00:14:19
Porque está envuelto en este tipo
00:14:22
Guarda
00:14:24
¿No lo podrías usar como una raíz de chart
00:14:27
Para distinguir una letra
00:14:29
Ante las terceras letras?
00:14:31
Sí, pero no accediendo a la posición del array,
00:14:32
porque el array está oculto,
00:14:35
sino accediendo a través del método que te ofrezcas.
00:14:36
Este tipo envuelve al array
00:14:41
y te da una nueva forma de usar ese array
00:14:43
que no es la tradicional.
00:14:45
Guarda muchos caracteres en fila.
00:14:49
¡Hala! Por ponerlo así.
00:14:51
Pues estupendo, porque muchos caracteres en fila
00:14:55
es una cadena de caracteres,
00:14:58
lo que nosotros usamos tan a menudo que nos es muy útil.
00:14:59
para guardar nombres, para poner mensajes.
00:15:01
Las cadenas de carácteres las necesitamos desde ya.
00:15:05
Estamos todo el rato mostrando cadenas de carácteres ahí,
00:15:07
poniéndolas tal cual,
00:15:10
cuando a lo mejor podríamos haberlas guardado en un objeto,
00:15:12
en una variable de esas,
00:15:15
y habría sido más cómodo.
00:15:17
Bueno, pues entonces,
00:15:20
ya sabemos que ese tipo de dato existe
00:15:21
y para qué vale.
00:15:23
¿Cómo lo usamos?
00:15:25
Esto tiene millones de métodos, de historias y de rollos,
00:15:27
pero vamos a ver el uso básico
00:15:29
para poder trabajar con él
00:15:32
pues yo declaro una variable string
00:15:33
como declara cualquier otra variable
00:15:35
igual que yo declaro una variable entera
00:15:37
poniendo tipo de dato y el nombre
00:15:39
que a mí me dé la gana
00:15:41
pues declaro una variable
00:15:42
cadena de caracteres
00:15:44
poniendo el tipo de dato
00:15:47
y aquí el nombre
00:15:49
de la variable que a mí me dé la gana
00:15:53
pues ya está
00:15:54
ya me he declarado una variable tipo
00:15:56
cadena de caracteres o variable string
00:15:58
Exactamente igual que me declaro un name
00:16:00
Exactamente igual
00:16:03
Vale, lo que pasa es que ahora
00:16:04
Esta variable sirve para guardar
00:16:07
Cadenas de caracteres
00:16:09
Y solo para eso, para guardar cadenas de caracteres
00:16:10
Por tanto, si yo quiero hacer una asignación
00:16:15
Pues tendré que hacer una asignación
00:16:17
Compatible
00:16:23
Por ejemplo, nombre igual
00:16:24
¿Y qué le podemos asignar a nombre?
00:16:30
Algo que sea cadena de caracteres
00:16:32
Como por ejemplo, esto
00:16:33
Ahí sí que tienes que ponerle antecomunidad
00:16:35
claro, porque esto es el valor
00:16:38
de esa cadena, yo quiero que esta cadena
00:16:41
tenga como contenido
00:16:43
esto, echamos otro asunto
00:16:44
esto, pues ya está, es una asignación válida
00:16:46
con espacios
00:16:48
claro, cualquier sucesión de caracteres
00:16:50
de la tabla ASTI, cualquiera
00:16:53
la que te dé la gana, es una cadena de caracteres
00:16:54
se le asignas la variable nombre
00:16:56
y ya está
00:16:58
y haces asignaciones exactamente igual
00:16:59
como que otra variable
00:17:03
imaginemos que tenemos otra variable
00:17:04
string que se llama apellido
00:17:06
por ejemplo, ahora tengo dos variables
00:17:09
string, por ejemplo
00:17:11
pues esto
00:17:13
si
00:17:14
podría hacer esto aunque no tenga sentido
00:17:16
pero en términos de
00:17:19
java es válido
00:17:21
al string apellido
00:17:22
le asigno lo que tenga nombre
00:17:25
lo que tenga nombre, entonces le estaría
00:17:27
asignando lo que tiene nombre que es Carlos
00:17:29
exactamente igual cuando trabajo con asignaciones
00:17:31
enteras, cuando hago
00:17:33
n igual a m
00:17:35
lo que tiene m
00:17:36
se lo asigno a n, porque ambas son
00:17:39
enteras, lo puedo hacer
00:17:41
pues aquí lo mismo, lo que tiene nombre
00:17:42
se lo asigno a apellido
00:17:45
porque ambas son este y lo puedo hacer
00:17:46
ya está, no pasa nada
00:17:48
entonces lo podemos usar como cualquier otro tipo
00:17:50
de dato, aunque internamente no funciona así
00:17:53
y es
00:17:55
¿vale? y ahora
00:17:56
nosotros ya hemos visto que el operador más
00:18:05
ya hemos mencionado, cuando trabaja con
00:18:07
cadenas de caracteres, concatena
00:18:09
Pues puedo concatenar string
00:18:11
Porque los string son cadenas de caracteres
00:18:14
Por ejemplo podría hacer esto
00:18:17
Y esto es una operación válida
00:18:19
Porque el operador más
00:18:27
Tiene una cadena a un lado
00:18:28
Y otra cadena al otro
00:18:30
Luego más es concatenación
00:18:31
Concatena esta cadena con esta cadena
00:18:34
Y la concatenación de ambas
00:18:37
Aquí
00:18:38
Vale, entonces
00:18:39
Bueno pues ved cualquier variable
00:18:41
Claro, claro, seguido
00:18:45
Si yo quiero un espacio, con catena entre medias
00:18:48
Una cadena espacio, lo que yo quiera
00:18:49
¿Vale? Entonces ves una variable string
00:18:51
Como una cadena de caracteres, sin más
00:18:54
Me da igual tener la cadena así puesta
00:18:56
Que tenerla guardada en una variable
00:18:58
Porque es lo mismo
00:19:00
Entonces, como variables para guardar valor
00:19:02
No tienen más que esto
00:19:06
Ahora ya el tema es
00:19:07
Si queremos hacer cosas con esas cadenas
00:19:10
Como por ejemplo
00:19:12
Ver, por ejemplo
00:19:13
ver el carácter que tengo en una posición
00:19:15
ver el tamaño que tiene
00:19:18
si quiero hacer eso
00:19:20
me puedo aprovechar
00:19:22
de que los objetos
00:19:23
como ya he dicho alguna vez
00:19:25
son variables
00:19:28
con muchas cositas dentro
00:19:30
y eso es lo que son físicamente
00:19:31
variables con muchas cosas dentro
00:19:33
pero
00:19:36
además de eso
00:19:37
son capaces de hacer cosas
00:19:39
que es lo que una variable
00:19:42
primitiva no es capaz
00:19:44
Entonces, como esto es una variable objeto
00:19:45
Aparte de tener su valor cadena dentro
00:19:52
Es capaz de hacer cosas
00:19:54
Y esa capacidad de hacer cosas
00:19:56
Nos va a permitir a través de esas cosas que es capaz de hacer
00:20:00
Obtener, por ejemplo, el char en una posición
00:20:03
Ver la longitud, cosas de esas
00:20:06
Es como cuando veíamos el escáner
00:20:09
El objeto escáner
00:20:11
vale, creo que he grabado con la otra cámara
00:20:12
porque se veía muy bien, o sea que vas ahí en el tejo
00:20:22
pero bueno
00:20:23
vale
00:20:24
vale, vamos a hacer
00:20:52
en una clase aparte
00:20:56
un ejemplo con string
00:20:57
pero la idea que he dicho
00:20:59
es, por ejemplo, ¿qué otro ejemplo de variable
00:21:02
de tipo objeto hemos usado hasta ahora?
00:21:04
pues el scan
00:21:06
¿verdad? ya en su momento
00:21:07
cuando lo usamos lo dijimos, dijimos, ojo
00:21:09
scan es una variable
00:21:11
más, lo que pasa
00:21:14
es que es una variable de un tipo construido
00:21:16
que se llama scanner
00:21:18
entonces aparte de guardar un valor
00:21:20
dentro, lo que sea que guarde
00:21:22
es capaz de hacer cosas
00:21:24
como esta
00:21:26
quedarse esperando a un boolean
00:21:27
recogerlo y
00:21:30
mandarlo para afuera a la variable que uno le dé
00:21:32
¿vale? entonces scan
00:21:34
como es una variable
00:21:36
de un tipo construido objeto
00:21:37
aparte de tener su propio valor
00:21:40
es capaz de hacer cosas
00:21:42
y ese hacer cosas se hace
00:21:43
nombre de variable, punto
00:21:46
y la acción que uno quiera hacer
00:21:48
pues string igual
00:21:49
string, además de guardar dentro su valor
00:21:51
que son todos los caracteres en filita
00:21:54
es capaz también de llamar a cositas
00:21:55
para hacer cosas
00:21:58
y vamos a ver las básicas en un ejemplo
00:21:59
tienen muchísimas
00:22:02
claro, pero con una cadena
00:22:04
te puede interesar a ti hacer mil cosas
00:22:05
entonces, por ejemplo
00:22:07
a ver
00:22:09
lo vamos a hacer en un proyecto aparte
00:22:10
aunque solo sea una clase
00:22:15
para subir la ola virtual
00:22:16
ejemplo stream
00:22:19
venga, vamos a hacernos
00:22:26
una nueva clase
00:22:43
ejemplo stream
00:22:44
venga
00:22:49
mi ejemplo stream
00:22:55
vamos a declararnos primero una cadena
00:23:00
Para guardar un nombre
00:23:04
Pues string, declaradísima
00:23:06
Nombre ahora ya me vale solo
00:23:11
Para guardar nombres
00:23:13
Ala
00:23:16
Ya está, una asignación perfectamente válida
00:23:19
Vale
00:23:22
Y efectivamente puede ser
00:23:23
Que yo tenga aquí
00:23:25
Otro nombre
00:23:27
Dos
00:23:29
Y tal y como hemos dicho
00:23:32
A nombre dos
00:23:34
Le puedo asignar nombre
00:23:36
O lo que a mí me dé la gana, por ejemplo, le voy a asignar la concatenación de nombre más nombre.
00:23:38
Entonces, si lo muestro, pues ya sabemos lo que nos va a salir, obviamente.
00:23:46
El nombre de arriba dos veces seguido.
00:23:49
Bueno, como nos podíamos esperar.
00:24:02
Bueno, pues esto es lo básico.
00:24:04
Vale, entonces, ahora, esta variable, por ser de tipo objeto,
00:24:09
aparte de recibir valor
00:24:17
y entregarlo en las expresiones
00:24:18
que haga falta, aparte de recibir
00:24:21
valor y entregarlo, puede
00:24:23
ejecutar acciones
00:24:24
que es lo que nunca haría un número
00:24:26
un char no puede ejecutar acciones
00:24:28
este sí puede
00:24:31
por ejemplo, ¿qué acciones puede
00:24:32
ejecutar? pues gracias a que tenemos
00:24:35
un entorno de desarrollo, pues el entorno de desarrollo ya no
00:24:37
chiva
00:24:39
¿vale? entonces ejecutar una acción
00:24:39
para que una variable ejecute una acción
00:24:42
Esto en términos de sintaxis
00:24:44
Tiene que ser poniendo un punto
00:24:47
Y aquí tenemos las tropecientas
00:24:48
Mil acciones
00:24:51
Que me puede hacer eso
00:24:52
Ahora mismo nos van a interesar poquísimas
00:24:54
Por ejemplo
00:24:57
Esta
00:24:59
Esta acción
00:25:01
¿Qué hace?
00:25:04
Asigna un número
00:25:06
No, asigna no
00:25:07
Tú le pasas un entero
00:25:10
Y te devuelve el char
00:25:12
que está
00:25:14
dentro del string, en esa posición
00:25:16
¿vale?
00:25:18
empezando por la 0
00:25:21
en la
00:25:23
posición
00:25:26
3
00:25:27
asumiendo que la primera es la 0
00:25:30
¿vale? entonces
00:25:34
si mostramos esto
00:25:40
pues nos va
00:25:42
a mostrar efectivamente
00:25:45
la posición
00:25:47
3 es
00:25:49
esta
00:25:51
esta, es la 3
00:25:52
vale
00:25:54
entonces si ejecutamos esto, pues obviamente nos muestra
00:25:55
la posición 3
00:25:58
vale, entonces este método
00:25:59
es uno de los 3 básicos
00:26:04
que vamos a mencionar ahora simplemente
00:26:07
pero bueno, son básicos para cualquier cosa
00:26:09
entonces que uno quiere de una cadena
00:26:11
el carácter de una posición
00:26:13
que puede quererlo a veces
00:26:15
llama aquí
00:26:17
y le da la posición
00:26:18
cuidado porque si nos pasamos
00:26:20
imaginaos que yo le digo la posición 98
00:26:22
esa posición no existe
00:26:24
si nos pasamos
00:26:25
pa, excepción
00:26:28
ya sabemos que cuando un programa
00:26:30
cuando la máquina virtual no sabe
00:26:32
qué hacer y se encuentra en una situación rara
00:26:34
te lanza una excepción y se para
00:26:36
pues es lo que ha hecho
00:26:38
te ha lanzado una excepción de qué tipo
00:26:40
string in travel bounds
00:26:42
te has salido de las
00:26:44
fronteras del string
00:26:46
y si vamos bajando
00:26:47
vamos bajando hasta
00:26:50
vamos bajando hasta que lleguemos
00:26:51
al primer código nuestro
00:26:53
que en este caso sería este
00:26:55
pero todos estos no son nuestros, son de la máquina virtual
00:26:57
pinchamos y se va
00:26:59
a donde dio el error
00:27:01
¿vale?
00:27:02
a ver, porque yo decía
00:27:08
dame el carácter de esta cadena, nombre
00:27:09
la puse 98, si 98
00:27:11
me he salido, solo tiene 0
00:27:13
1, 2, 3, 4
00:27:15
como le dé de la 5 en adelante
00:27:17
la máquina virtual no sabe
00:27:20
qué hacer
00:27:22
y cuando la máquina virtual no sabe qué hacer
00:27:23
para el programa, pum, parado
00:27:25
y además te dice todo eso
00:27:28
entonces
00:27:29
está ya
00:27:32
lógicamente que nos vaya sonando
00:27:34
si nos sale
00:27:36
esta excepción es porque en algún sitio
00:27:38
hemos intentado acceder
00:27:40
a una posición
00:27:42
de variable que no está
00:27:43
¿vale?
00:27:45
vale
00:27:47
bueno este método está claro como funciona
00:27:52
que otros dos
00:27:55
métodos necesitamos a
00:27:59
cortísimo plazo
00:28:01
cuando digo método, digo método
00:28:02
porque es un nombre técnico
00:28:05
pero
00:28:07
entended que es la acción
00:28:09
que este objeto es capaz de realizar
00:28:10
este objeto nombre es capaz
00:28:13
de buscar en sí mismo el char de posición
00:28:15
3 y entregarlo para afuera
00:28:17
vale, que más acciones es capaz de
00:28:18
Realizar una variable objeto string.
00:28:21
Pues una muy interesante que es contarse y decir cuántos caracteres tiene.
00:28:24
Esta es una también muy interesante.
00:28:31
Sí, no quiero poner ñ porque en función de dónde trabaje uno, pues sí o no.
00:28:38
¿La Java Virtual Machine tiene ñ?
00:28:51
A ver, es que la Java Virtual Machine no entiende de caracteres.
00:28:57
Entiende solamente de punto class.
00:29:01
Te refieres al Java C.
00:29:02
Si el Java C admite
00:29:04
Si le pones el
00:29:06
Claro, el módulo correspondiente
00:29:08
O sea, Java C tiene que
00:29:10
Admitir eso dentro de sus caracteres
00:29:12
Pero hay que ponerle un módulo aparte
00:29:15
De todas formas, yo creo que ahora mismo
00:29:16
Tal y como lo tenemos nosotros, sí que admite
00:29:18
La ñ
00:29:20
Pero como recomendación habitual
00:29:21
Caracteres raros
00:29:24
Con tildes, con cosas raras, nunca
00:29:26
Alfanuméricos
00:29:28
Barras bajas
00:29:31
Y el dólar es que se usa bastante
00:29:32
como para variables de control
00:29:34
que empiezan por dólar
00:29:36
entonces el dólar se admite en todos los
00:29:37
voy a dejar la ñ a propósito a ver si
00:29:39
vale, y entonces ahora pongo
00:29:41
vale
00:29:44
entonces, ¿esto qué hace?
00:29:48
se va a guardar en un int
00:29:51
la longitud del dólar
00:29:52
claro, este método o esta acción
00:29:53
cuenta los caracteres
00:29:56
de esta cadena, los cuenta
00:29:59
y los guarda aquí
00:30:00
y los guarda aquí
00:30:02
y ahora lo muestro
00:30:04
No, los que tienes
00:30:05
Si tienes 7, 7
00:30:10
O sea, no te muestra la última
00:30:11
En Anita tendría 5
00:30:13
Los cuenta
00:30:16
1, 2, 3, 4, 5, 6
00:30:17
Eso, no cuenta 0, 1, 2, 3
00:30:18
No cuenta 1, 2, 3, 4
00:30:22
Vale, entonces si ejecutamos esto
00:30:24
Pues 5
00:30:26
Vale, entonces al compilador
00:30:29
Este javacea, la versión de jdk
00:30:30
O javacenuestro
00:30:32
La ñ no la han gusteado mucho
00:30:33
no, que no le ha angustiado
00:30:35
le ha gustado, pero
00:30:38
es muy mal hábito ese
00:30:40
así que
00:30:43
lo ponemos
00:30:45
me ha salido 5
00:30:47
que es el que tiene
00:30:56
me ha salido
00:30:57
hay un 5
00:31:00
Vale, y ya último
00:31:01
Último
00:31:14
¿Qué hacemos muy a menudo
00:31:19
Hasta ahora con nuestros números, nuestras cosas?
00:31:22
Pues mirad
00:31:25
Los igualábamos, ¿verdad?
00:31:26
Igualábamos, n es igual a m
00:31:28
Pues entonces no sé qué
00:31:30
O sea, el ser igual a
00:31:31
Lo hemos usado mucho entre números, ¿verdad?
00:31:32
Este número es igual a este otro
00:31:35
bueno, pues algo que también podemos
00:31:36
necesitar hacer es ver si una cadena es igual a otra
00:31:38
vale
00:31:41
pues ver si una cadena es igual a otra
00:31:42
para hacer una condición de igualdad
00:31:45
esta cadena es igual a esta otra
00:31:46
puede ser algo que queramos hacer
00:31:48
ver si una cadena es igual a otra
00:31:51
entonces uno podría
00:31:52
ir así tranquilamente
00:31:54
boolean
00:31:56
iguales, vamos a meter aquí
00:32:02
la condición de que nombre
00:32:05
sea igual a nombre 2
00:32:07
¿Vale?
00:32:08
Entonces la condición de que nombre sea igual a nombre 2
00:32:19
La pondríais así, ¿verdad?
00:32:22
¿Vale?
00:32:34
Entonces en este caso me va a dar false
00:32:38
Porque nombre 2 tiene Anitta Anitta
00:32:39
Y nombre tiene Anitta Paloseco
00:32:41
No son iguales
00:32:43
Entonces me va a dar false, ¿verdad?
00:32:44
Vale
00:32:47
Pero, cuidado
00:32:47
Cuidado
00:32:50
Y esto lo tenéis que grabar en la cabeza
00:32:55
no se comparan
00:32:57
la comparación de igualdad
00:32:59
si un objeto es igual que otro
00:33:01
sea string, sea el que sea
00:33:02
nunca jamás se haría con esto
00:33:04
nunca jamás se hace con eso
00:33:07
el doble igual vale solo
00:33:08
para ver si son iguales variables primitivas
00:33:10
solo para eso
00:33:14
si un int es igual a un int
00:33:15
si un char es igual a un char
00:33:16
solo para ver si dos variables primitivas son iguales
00:33:18
cuando las variables
00:33:21
son variables de tipo objeto
00:33:23
y el string lo es
00:33:24
nunca se las compara con doble igual
00:33:26
sino que se las compara
00:33:28
llamando a una acción
00:33:30
que es la que se encarga
00:33:32
de hacer la igualdad
00:33:34
así si se compara
00:33:35
que esta variable
00:33:38
objeto string
00:33:39
sea igual a esta otra variable
00:33:41
objeto string
00:33:43
te devuelve true si son iguales
00:33:44
o false si no
00:33:47
es que es completamente
00:33:48
porque es muy distinto
00:33:54
vamos a poner las dos expresiones
00:33:56
Vamos a poner las dos expresiones
00:33:57
Que vais a entender la diferencia
00:34:02
Porque no tiene nada que ver
00:34:04
Hacer esto con hacer esto
00:34:06
Y esta es la base
00:34:10
De la programación de entrada de objetos
00:34:11
En realidad
00:34:14
Y de no entenderlo muy bien
00:34:15
Más adelante, ya estamos con objetos
00:34:17
Pueden ser unos errores que no veas
00:34:19
Vosotros diríais
00:34:20
Que esto de arriba en realidad es esto de abajo
00:34:22
¿Por qué inventarse otra forma?
00:34:26
Porque esto de arriba no es esto de abajo
00:34:28
Son dos formas
00:34:30
es distinto, ¿y por qué es distinto?
00:34:31
vamos a ver, vamos a
00:34:34
poner el paint
00:34:36
¿por qué es distinto?
00:34:37
el paint, a ver, se ve, ¿no?
00:34:42
a ver
00:34:45
yo tengo aquí
00:34:46
una variable string nombre
00:34:49
vale, que es
00:34:50
esta, ahí
00:34:56
vale
00:35:01
¿qué tengo cuando tengo una variable objeto
00:35:02
string? ya lo hemos dicho lo que teníamos
00:35:05
que tenemos en realidad
00:35:07
una dirección de memoria, tenemos esto
00:35:08
y la verdadera variable
00:35:11
en este caso las cadenas de caracteres
00:35:13
están aquí, aquí está la nita
00:35:15
aquí está la nita
00:35:17
nombre, tira dirección de memoria
00:35:18
vale, ahora ponemos nombre2
00:35:20
vale, pues nombre2
00:35:22
estará aquí
00:35:25
ah, te va a medir
00:35:26
si la cantidad de memoria usada
00:35:29
es igual
00:35:31
no, no exactamente
00:35:31
ay que pena, bueno se ve ¿no?
00:35:34
Es que ya volver a situar ese
00:35:36
Ya va a ser muy complicado
00:35:42
Bueno, da igual, se ve que es nombre 2
00:35:43
¿No? Ese... Vale
00:35:50
¿Nombre 2 qué es? En realidad
00:35:52
Nombre 2 es la dirección de memoria
00:35:54
De otro sitio en la RAM
00:35:56
Donde está
00:35:58
La otra sucesión de cadenas
00:35:59
¿Vale? Está claro que esto es lo que
00:36:01
Tenemos físicamente cuando
00:36:04
Declaramos un string nombre y string
00:36:06
Nombre 2, cuando declaramos
00:36:08
String nombre tenemos
00:36:10
bajo nombre la dirección
00:36:11
de memoria que está apuntando
00:36:14
al contenido
00:36:16
y bajo nombre 2 tenemos la dirección
00:36:17
de memoria que está apuntando al contenido, la cadena
00:36:19
vale, pues cuando
00:36:22
hacemos
00:36:23
es para que se apunte a la misma
00:36:24
igual, igual, exacto, a ver
00:36:27
cuando hacemos nombre
00:36:29
igual a nombre 2
00:36:30
cuando hacemos
00:36:34
esta sentencia, esta condición
00:36:35
¿qué estamos haciendo con esta
00:36:37
condición, ver si esta
00:36:40
dirección es igual a esta
00:36:42
eso no nos importa nada
00:36:43
no nos importa nada, lo que queremos ver
00:36:45
es si la cadena de caracteres
00:36:48
que hay aquí es igual que la cadena de caracteres
00:36:50
que hay aquí, eso es lo que queremos ver
00:36:52
porque aquí puede haber Anitta
00:36:53
y aquí Anitta
00:36:56
pero si yo hago nombre doble igual
00:36:57
nombre dos, me va a decir
00:36:59
las direcciones de memoria
00:37:01
son distintas, porque es lo que compara
00:37:03
compara la propia variable
00:37:05
y la variable tiene la dirección
00:37:07
Entonces el doble igual
00:37:08
Te está comparando el contenido de la variable
00:37:11
Y el contenido es la dirección
00:37:13
No queremos comparar las direcciones
00:37:14
Queremos comparar que el contenido
00:37:17
Lo que apunta
00:37:20
Sea igual
00:37:21
A lo que apunta
00:37:23
¿Puede estar duplicado?
00:37:24
Sí, pero a nosotros no nos importa
00:37:27
Lo que nos importa es que sea el mismo texto
00:37:28
Entonces en ese caso
00:37:29
Nunca haríamos esto
00:37:32
Haríamos esto otro que os he dicho
00:37:33
vale
00:37:40
y esto
00:37:47
ahora ya sí, esto es un comportamiento
00:37:48
una acción a la que llama esta variable
00:37:52
y esta acción ya implica muchas cosas
00:37:54
esta acción implica
00:37:56
vete a la dirección a donde apunta
00:37:58
nombre, ahora
00:38:00
vete a la dirección a donde apunta nombre 2
00:38:02
cuando tengas esas dos cadenas
00:38:04
mira a ver si son iguales char por char
00:38:06
uno tras otro, pin, pin, pin
00:38:08
mira a ver si son iguales
00:38:10
Y si son iguales todos los char, devuelve true. Eso es todo lo que hace esto, que es un montón de cosas. Sin embargo, el doble igual no hacía nada de eso. El doble igual decía, oye, lo que hay bajo este nombre es igual que lo que hay bajo este nombre.
00:38:12
No, ya está. Pero esa acción no nos interesa para nada. Nos interesa esta otra. Ver si esta cadena de caracteres es igual, chara, chara, esta otra. Pues eso hay que construirlo mediante una acción. Y esa acción está construida con este nombrecito.
00:38:26
está construida con ese nombre
00:38:43
vale
00:38:45
vale, pues entonces
00:38:46
ahora mismo serían
00:38:53
estos tres
00:38:55
estas tres acciones
00:39:00
podemos irlas llamando métodos ya
00:39:02
para usar lenguaje técnico un poco más
00:39:04
estos tres métodos
00:39:06
el charat, el length y el equals
00:39:07
los que más nos importan de string
00:39:10
¿Vale? Los que más nos importan porque para ser operativos desde ya y poder hacer pequeñas cositas en nuestros programas, pues que menos que poder acceder a la posición, al carácter de una posición, saber la longitud para no pasarnos y ver si una cadena es igual a otra.
00:39:12
que hay más métodos
00:39:30
por supuesto, hay tropecientos mil
00:39:35
están todos ahí
00:39:37
y en el aula virtual
00:39:38
en el aula virtual
00:39:41
he puesto una
00:39:43
donde pone ejercicios para practicar
00:39:45
con métodos de stream
00:39:47
pues hay ahí unos pequeños ejercicios
00:39:48
que son simplemente
00:39:51
para
00:39:53
usar diferentes métodos que tiene
00:39:54
por si uno los quiere usar
00:39:57
pero ahora mismo no nos importa
00:39:58
ni os voy a examinar
00:40:00
el examen del 11
00:40:03
el examen sorpresa del viernes 11
00:40:04
no va a ser de esos métodos
00:40:08
de string para nada
00:40:09
estos tres básicos sí que pueden
00:40:10
estos tres básicos sí
00:40:13
porque es que esto es para cualquier cosa que hagamos
00:40:14
que involucre una cadera va a hacer falta
00:40:17
pero los demás ya son
00:40:18
pero los demás poco a poco
00:40:20
si no se va familiarizando a incorporarlos mejor
00:40:23
¿vale?
00:40:25
Vale, vale. Bueno, a ver, que estáis recogiendo muy rápido.
00:40:28
Bueno, venga, anda, nada, ya.
00:40:34
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 18
- Fecha:
- 30 de septiembre de 2024 - 22:11
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 40′ 41″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 917.94 MBytes