[MÚSICA] Hola. Bienvenido a este tercer video. Ahora desarrollaremos el constructor Disco. En su documentación dice que interacciona con el usuario, es decir, lee y escribe en la consola. you usaste system.out para escribir. Utilizaremos la clase java .util .Scanner para leer el teclado. Como la clase Scanner pertenece al paquete java.util, Java no te da esta clase automáticamente, sino que le tienes que avisar al compilador para que la incluya en la compilación. Para avisarle a Java que vas a utilizar alguna clase que no está en el paquete, que estás armando, ni en java.lang, debes integrar la clase que deseas a la compilación de tu proyecto. Esto se hace con un enunciado de importación, que va antes del encabezado de la clase o interfaz y tiene la siguiente sintaxis. Deberá aparecer uno de estos enunciados por cada clase que importes. Puedes importar a todas las clases de un paquete, si es que vas a usar muchas de las clases del mismo, colocando en lugar del nombre de clase un asterisco. En este caso, quieres importar la clase Scanner, que interpreta sucesiones de caracteres, lee cadenas y números, entre otros. Entre los métodos principales que vamos a usar, está al menos un constructor. Entre los muchos constructores de un escáner, tenemos el que podemos montar sobre la consola y cuyo encabezado es, construye un escáner sobre el inputStream que se le proporcione. Lee, conforme se le vaya pidiendo, del inputStream al que se haya asociado. Le vamos asociar a system.in, que es un inputStream. System.in corresponde al teclado y refleja lo tecleado en la pantalla. Entre los métodos de lectura de escáner, que son muchos y puedes verlos en la documentación de Java 8, vamos a usar. Regresa a la siguiente línea a partir de donde se encuentre hasta que encuentre el Enter, pero no lo incluye en la cadena. Lee el siguiente entero, saltando espacios, tabuladores y Enter, hasta que encuentre el entero. Termina con cualquier cosa que sea distinta a un dígito. Si lo primero que se encuentra no es un dígito, aborta con un mensaje de error. Igual que nextInt, pero regresa un short. Sigamos ahora con la codificación del constructor Disco. Estás dentro del bloque del constructor Disco. Para leer de la consola, vas a utilizar un escáner. Recuerda que System.in es precisamente un inputStream, así que puedes construir tu objeto Scanner con montándolo sobre el teclado con eco en la consola. El objeto construido lo asignas a un objeto de la clase Scanner. Para escribir algo en la consola tienes you system.out y system.err. Empiezas ahora la comunicación con el usuario, escribiendo en system.out y leyendo en el escáner. Le pides el tipo de disco, indicándole primero cuáles son los tipos que tienes. El primero es printIn, por lo que cambias de renglón al terminar la cadena. Pero el segundo es un print que se queda atorado al final de la flecha. Es el turno de leer el tipo de disco, un short, por lo que usas el método nextShort invocándolo desde el escáner. El valor que regresa este método lo puedes asignar directamente al atributo TIPO_DISCO, pero es importante que vigilemos que el valor dado por el usuario sea válido. Así que nuevamente usas el método auxiliar, cuyo encabezado es. Compilamos. Al compilar, nos detecta un error de incompatibilidad de tipos. Recuerda que un int no cabe en un short, por lo que tienes que hacer nuevamente un casting al valor que entregue el método. Esperas a que el usuario teclee un Enter antes de proseguir, usando el método de clase String, que consume entrada hasta que encuentre un Enter. Con esto limpias la entrada y desechas todo lo tecleado después de un short, incluyendo el Enter. Debes avisarle al usuario que ahora quieres el nombre del disco o la información general del disco. Como you tenemos el tipo del disco, CD, DVD o Blu-Ray, dependiendo de eso haremos la pregunta. Usaremos nuevamente la expresión condicional, usando el operador para comprar datos primitivos ==, que queda organizada de la siguiente manera. Escribimos un mensaje general. Pregunta si se trata de un CD. Si lo es, agrega el mensaje para el cantante. Si no, pregunta si es DVD. En cuyo caso, pregunta por la película. Si no es ninguno de los dos, pregunta por la serie. Y termina la condicional, así que escribes la flecha. Seguimos con la codificación del constructor disco. Nombre es una cadena string, por lo que pedirla es todavía más sencillo. Utilizamos el método nextLine de la clase Scanner, que lee desde donde se encuentra en la entrada hasta que se encuentra un Enter. Como you mencionamos, regresa la cadena que leyó sin el Enter. Asignas el nombre de esta función al atributo NOMBRE. Pero como no siempre la información que teclee el usuario es la que esperabas, quieres verificar que no te den una cadena vacía. Para ello, usas tu método auxiliar, checaCadena. Un argumento de tipo string puede ser una función que regrese una cadena, una literal de cadena o una variable de tipo string. Ahora solicitaremos el valor del campo año. Definiste you el rango para el año de grabación con constantes simbólicas de la clase. Las llamaste PRIMER_ANHO para 1900 y ULTIMO_ANHO para 2020. Das un mensaje relativo a lo que esperas del usuario usando las constantes simbólicas definidas. Tomas el valor de lo que teclee el usuario, que debe ser un int. Debes verificar, antes de asignar, que el valor que te den esté en rango y lo asignas a la constante ANHO. Vuelves a comerte el resto de la línea. Por último, en este constructor preguntas por el entero que representa a las transmisiones simultáneas permitidas que, aunque no es una constante, es conveniente tenerlo al construir un disco. Lo haces exactamente igual que las solicitudes anteriores de enteros. Primero escribes un mensaje al usuario para decirle qué es lo que estás pidiendo. Después, lees el entero. Lo verificas con checaEntero y le asignas al atributo permitidas. Nuevamente desechas el resto de línea. Das las gracias para despedirte. Terminas desconectando a system.in del escáner, cerrándolo. Con esto has terminado el constructor sin parámetros. [MÚSICA] [MÚSICA] [MÚSICA]