En este vídeo atiendo la petición de algunos de vosotros de explicar los tipos enumerados en Java. Para más cursos, ejercicios y manuales visita: www.pildorasinf...
✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅ 🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀 🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀 💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
Otra vez este video es otro de los que me costó trabajo entender, pero finalmente lo entendí. En resumen, cuando declaramos una enumeración, por ejemplo así: enum colores {ROJO, VERDE, AZUL} lo que se hace realmente es crear un nuevo tipo de dato (por decirlo de alguna forma) que se llama "colores", por lo tanto, "colores" es un tipo de dato enumerado. Entonces, la siguiente instrucción: colores mis_colores; la variable "mis_colores" es una variable de tipo "colores", o sea, de tipo enumerado, que sólo permitirá los valores ROJO, VERDE y AZUL, y para asignar estos valores se tiene que hacer a través del tipo de dato "colores", así: colores.Rojo, colores.VERDE o colores.AZUL, porque los valores ROJO, VERDE y AZUL no son de tipo "String" ni nada de eso, son de tipo "colores", o sea, forman parte de una enumeración, son de tipo enumerado, son una enumeración!!! y además siempre se acceden a través del tipo de dato enumerado (colores) porque son propiedades privadas (por decirlo de alguna forma) y por tanto no son accesibles fuera de la declaración de la enumeración, por ejemplo, desde una variable de tipo "colores". El segundo ejercicio es más difícil de entender, les recomiendo que lo tengan a la vista a la par que leen lo siguiente. Cuando se crea el tipo enumerado "Talla" con su método constructor, con su método "getter" y con su propiedad "abreviatura", significa que cada valor de la enumeración (MINI, MEDIANO, GRANDE, MUY_GRANDE) tendrán una copia del constructor, del método "getter" y de la propiedad "abreviatura", por ejemplo, si creamos la siguiente instrucción: Talla t = Talla . MEDIANO; La variable "t" es de tipo "Talla" (de tipo enumerado) y está preparada para recibir los valores MINI, MEDIANO, etc., que son valores enumerados (accesibles a través del tipo de la enumeración). En este caso, a la variable "t" se le está asignando el valor enumerado MEDIANO, pero no sólo eso, si no que además se está invocando al constructor pasándole como argumento la cadena "M" y dentro del constructor se almacena la cadena "M" en la propiedad "abreviatura". Entonces, la variable "t" es en realidad un objeto que contiene 3 cosas: el valor enumerado MEDIANO; la propiedad privada "abreviatura" (la cual almacena la cadena "M"); y el método "getter" que devolverá el valor de la propiedad "abreviatura". Por lo tanto, la siguiente instrucción: System . out . println ( t + "(" + t . dameAbreviatura () + ")") ; Imprimirá lo siguiente por consola: MEDIANO(M) Otro ejemplo: Talla t1 = Talla . MINI; Talla t2 = Talla . MUY_GRANDE; Las variables "t1" y "t2", como ya mencioné anteriormente, tienen una copia del constructor, del método getter y de la propiedad "abreviatura". La instrucción "Talla . MINI" invocará al constructor pasándole la cadena "S" para que la almacene en la propiedad "abreviatura" y almacenará en "t1" el valor enumerado MINI. La instrucción "Talla . MUY_GRANDE" invocará al constructor pasándole la cadena "XL", éste almacenará dicha cadena en la propiedad "abreviatura" y finalmente almacenará en "t2" el valor enumerado MUY_GRANDE. Si se imprime la información de ambos objetos por consola, así: System . out . println ( t1 + "(" + t1 . dameAbreviatura () + ")") ; System . out . println ( t2 + "(" + t2 . dameAbreviatura () + ")") ; En consola se imprimirá lo siguiente: MINI(S) MUY_GRANDE(XL) Observación curiosa: en el minuto 19:57 del video aparece en el asistente de Eclipse la propiedad privada "abreviatura", ¿no se supone que no debe de salir porque es privada? ¿y sólo es accesible dentro de la enumeración? Mi única respuesta por ahora sobre esto es que las enumeraciones al no ser clases tal vez el comportamiento de los modificadores de acceso es diferente.
Bien desgranado. El único "problema" del vídeo es que se explica muy sobre la marcha que una constante enum puede tener campos (que de primeras resulta extraño) y que el comportamiento de asignación y recuperación es como el de una clase, que aplica a cada uno de esos elementos constantes.
ChatGTP me dio esta respuesta, al dia de hoy sabes por que? The reason for this is that enums in Java are a special type of class, and their instances are treated like static final fields. This means that the fields of an enum instance, including private fields, can be accessed directly from outside the enum, just like accessing the fields of a regular class's static final fields.
Oscar Ballart: Voy a intentar resolver tu batería de dudas: 1) Efectivamente no se trata de un Array, sino de una clase (Talla) que posee en nuestro ejemplo cuatro ejemplares (MINI, MEDIANO, GRANDE y EXTRA_GRANDE) denominados "Constantes enumeradas" en la que no se pueden añadir más ejemplares a posteriori. 2) Los valores en mayúsculas se definen como "Constantes enumeradas". No son Arrays, fuera esa idea de la cabeza! 3) Al escribir final String[] Talla={“MINI”, “MEDIANO”, “GRANDE”, “MUY_GRANDE”} lo único que estás haciendo es impedir que se pueda redefinir el Array en el futuro como por ejemplo: Talla =new String[7]; ya que ha sido declarado como final. Pero si que puede hacer lo siguiente: Talla [0]="EXTRA_GRANDE" a pesar del final. La solución para no poder modificar los valores almacenados en un Array pasaría por almacenar objetos inmutables (hablaremos de ello). 4) CORRECTO !! 5) La definición correcta que te darán todos los libros es "Constantes enumeradas". Son en definitiva ejemplares de clase pertenecientes a la clase enumerada Talla. Creo que a estas alturas de curso, todos sabemos lo que es un ejemplar de clase. ¿Por qué entonces la definición de constante enumerada? "Constante" porque no pueden cambiar una vez definidos (no existe ni podrá existir Talla.MEGA_GRANDE) y "enumerada" porque la clase Talla hereda de la clase enum de la API Java. Siempre que crees en tus programas un tipo enumerado, estás heredando de la clase enum de la API. Por tanto podrás utilizar todos los métodos pertenecientes a enum reflejados en la API (tal y como hacemos en nuestro código con valueOf por ejemplo) 6) private Talla(MINI(“S”) . El this hace referencia siempre al parámetro implícito. Como siempre intento utilizar la menor "jerga" de programación posible para no asustar a nadie, yo hablo de objeto cuando me refiero al parámetro implícito. Es decir, el this hace referencia al objeto. En la instrucción this.abreviatura=abreviatura, el this hace referencia al campo de clase abreviatura (la variable abreviatura del objeto), mientras que abreviatura a secas hace referencia al parámetro del constructor. Es por este motivo por el cual realmente es Talla.MINI("S"). Cuando construyes una constante enumerada, estás invocando al constructor (al de la clase enum de la API si no has declarado tú otro constructor, o al que has creado tú como es nuestro caso). Al escribir enum Talla{ MINI("S")....... ahí ya hemos invocado (llamado) al constructor (private Talla (String abreviatura){...}) ¿Dónde se asocia la "S" a la constante enumerada MINI?? Precisamente al invocar al constructor: en MINI("S"). La "S" viaja al parámetro del constructor (explícito) y se almacena en abreviatura. De esta forma queda asignada la "S" a la constante que invoca (llama) al constructor, en este caso MINI. 7) Esta duda se arrastra de antes. Son constantes enumeradas Este vídeo lo puse como respuesta a una petición que me hicisteis varios de vosotros. Estoy dudando de si lo he subido en el momento adecuado, tal vez debí esperar a avanzar un poco más. No os preocupéis si no se ha entendido este vídeo. No influye en el desarrollo de los siguientes. Suelen poner cosas de tipos enumerados en los exámenes de certificación (OCPJP de Oracle). Saludos !!
La verdad, que un poco más difícil sí que es. Hay que tener muy claro conceptos anteriores(Herencia, instanciar Objetos, etc.). Me parece que haces lo mismo que antes, pero con una sintaxis un poco diferente al tratarse de una Clase enum ¿no? ¿Puede ser que sea como un tipo de Encapsulación, mucho más restrictiva, que cualquier modificador de acceso?
pildorasinformaticas Gracias por tomarte el tiempo es contestar a todo. Creo q a mas de uno nos ha venido bien, xq para mi de los 48 videos q llevo, ha sido el de mas dificil comprension, y las duas mas o menos vienen q ser las mismas. Un saludo!
pildorasinformaticas Hola, buenas noches: Ante todo, darle mi más sincera enhorabuena por este curso. Estoy siguiéndolo y me parece genial. Todo muy bien explicado y de forma incremental con una curba de aprendizaje (hasta ahora) muy asequible al menos para mí. Este ha sido el único vídeo en el que he tenido algún problema a la hora de seguirlo, pero debo decirle que es por motivos estrictamente personales. Me gustaría aprovechar y hacerle una consulta, aunque no está directamente relacionada con el tema del vídeo. Llevo dándome cuenta, desde que empecé hace unos días a ver los vídeos, que cuando utilizo la clase Scanner para crear un objeto, pese a que posteriormente hago uso de él como es en este caso para obtener la respuesta del usuario por consola, en la línea de declaración del objeto entrada (o como se le llame) me marca un error. ¿A que se debe y cómo solucionarlo? disculpe que le ponga esta cuestión por aquí, pero es la primera vez que comento uno de sus vídeos. Mil gracias de nuevo por todo su trabajo. siga así. Un saludo.
- Hijo, qué es eso de enum, que drogas estás tomando? - Se llaman pildoras - qué pildoras? - informáticas - me tomas el pelo? - Eso te lo diré en la próxima entrega. Hasta entonces, que te vaya bien XD XD
La verdad que este es el primer vídeo que me ha costado un poco, pero tocando un poco el código y retrocediendo el vídeo un poco, lo entendí. No aguanto a llegar al final del curso y empezar con Android. Muchas gracias por el tiempo y el esfuerzo que dedicás para hacer este tipo de vídeos. Saludos desde Argentina.
El primer video que me deja medio K.O....también es verdad que llevo viendo uno tras otro desde primera hora de la mañana y son las 19:00....mañana lo veo otra vez mas fresco, saludos!
Muchas gracias por todo el tiempo y dedicación que pones en estos cursos. Además de darle al "me gusta" pensaba qué más podría hacer para devolverte una parte de lo que me das y me alegró ver el botón "Donate" en tu web. Muchas gracias de nuevo
Muchas gracias por tu trabajo, es magnifica la forma en la que explica cada tema. Creo que este curso vale oro y es mucho mejor que varios cursos presenciales que cuestan mucho dinero, y usted aquí nos lo ha dejado totalmente gratis. Lento pero seguro voy avanzando y espero luego seguir con su curso de programación en Android. Saludos desde Argentina.
Por si le sirve a alguien, las clases MINI, MEDIANO, GRANDE Y MUY GRANDE deben estar en mayúsculas al definirlas al inicio en la Clase ENUM, si las escriben en minúsculas les dará error
Estoy empezando este video, sin embargo hasta ahora todos los anteriores han sido excelentemente bien explicados, eres brillante Juan, muchas gracias !!!!
Uff se me hizo un balurdo barbaro =( , sobre todo la segunda parte jeje, pero no me desanimo, seguire adelante... ya volvere a ver la luz. Gracias Profe.
Repetir repetir.... y Si ya lo he entendido mejor, estos días los he repetido desde el 45 al 60 y poco a poco me quedan más conceptos. :) Grandes tutoriales!!!!
Para mí, personalmente, la clave para entender el segundo ejemplo fue que, hasta este punto del curso, estábamos acostumbrados a que el constructor sirva para instanciar objetos. Sin embargo, en los enum no se pueden instanciar objetos nuevos, sino que todos los que existen ya están instanciados en la lista que vemos. Entonces, ¿para qué crear un constructor con un parámetro? Bueno, porque es una excusa para asociar los objetos, en este caso de tipo Talla, a un atributo o característica propia que más tarde nos pueda venir bien obtener con un getter. Con esto ya se me hizo la luz y pude comprender el vídeo. Lo comparto por si a alguien más le ayuda. Al final enum Talla es parecido a decir class Talla, sólo que no podemos instanciar objetos Talla, sino que todos están ya instanciados. Cuando decimos MINI("S"), o MEDIANA("M"), es como decir que esos objetos se han instanciado con ese parámetro. Si tú pudieras usar ese constructor y metieras el parámetro S, te crearía el objeto MINI.
Hola muy buen vídeo, gracias por poner los cursos en línea de fácil acceso, no te había escrito, pero creo que es el momento oportuno, tu trabajo es genial, hace tiempo, ya muchos ayeres vi Java en la universidad, y por cuestiones que retome un proyecto regrese a programar, al principio del curso me dormía, no te lo voy a negar, pero llegado a este punto, me emocione, por fin llegamos al pantano y nos empezamos a sumergir en el lodo y fango denso que es Java, y me da gusto que sea de la mano de un profesional como tu, terminando este curso me gustaría que me dieras asesorías personalizadas; pero para eso aun falta. Gracias
Explican muy bien. Gracias, solo me he visto parte del vídeo 4:08 y ya se me han aclarado algunas dudas. Gracias nuevamente. EL tema de los Sockets también me sirvió mucho.
Profesor, en este vídeo si me a costado captar y de hecho aun tengo lagunas. Me puse en mi - cotidiana y rutinaria - tarea de leer los comentarios. Y allí a uno de los compañeros (alumnos) le pidió paciencia para entender las Enumeraciones y que todo quedaría claro en la Programación Genérica. Por curiosidad busque la Programación Genérica en la Lista de Reproducción y es el N° 161 y aún vamos en el 48... Se ve tan lejano. Así de difícil es a estas alturas entender bien lo de las Enumeraciones? Gracias por su respuesta. Y pese a todo aquí sigo.
Creo que con esto ya voy bien para mi práctica de Programación. Son las 4 de la mañana pero voy a tope jeje (me quedan unas horas para entregar) Por cierto, muchísimas gracias por el curso
Hola cómo estás Juan?. Por ser la primera vez que escribo un comentario. Antes que otra cosa quiero decir muchas gracias por tu tiempo el contenido que compartes esta excelente.😇👌 En cuanto a este tema: tipos numerados; me surgió una inquietud e intenté hacer una mejora y la finalidad era ser capaz de aceptar cualquier de los datos (talla o abreviación) entrada de datos y que nos mostrará el resultado correspondiente en ambos formas. La principal idea es hacerlo lo más simplificado posible tratando de agregar el menos código posible a lo ya existente. Saludos, 🤝 desdé México.
Hola Profesor. Antes que nada agradecerte x este curso q me tiene atrapado como nunca nada me atrapo antes. En este video, hay algunas cosas que me confunden un poco. En primer lugar, no termino de entender si Talla es una variable objeto (como indicas en el minuto 04:15), o si es una clase (según entendí en el minuto 06:05) que hereda de Enum. Tampoco me queda claro por que en el minuto 06:05 al usar los métodos y los valores estáticos, y al tener que anteponer a ellos la clase, la clase usada es Talla, mientras que en el minuto 17:34 la clase es Enum. Entiendo que en el minuto 17.34 el método que se quiere usar es estático y pertenece a la clase Enum, pero en el minuto 06:05 cuando ponemos "Talla s=Talla." eclipse no sugiere algunos métodos que pertenecen a la clase u objeto Talla, pero q no vi declarados en ningún lado, como por ejemplo "valueOf(String arg0):Talla. Por ultimo, en el minuto 17:35, declaras una variable "la_talla" q luego, en el minuto 19:54, se comporta como objeto al aplicarle el método Getter dameAbreviatura(); En este caso, tienen las variables de tipo Talla un comportamiento de objeto? Son dudas que no vi planteadas por ningún subscriptor, lo cual me hace sospechar q algo se me escapo durante el curso. Agradezco la respuesta. Saludos!
Buenas tardes! Vaya, entonces imagino que posiblemente te llego mis Peticiones de PARTE 3 jeje lo que no me esperaba es que respondieses a las peticiones, bueno ya sabes mi postura respecto a la parte 3 propuesta. Gracias de antemano Respecto al tema de los tipos Enumerados: No se porque pero me cuesta entender algunas metodologías que has aplicado en este video Veamos si puedes aclararme toda esta batería de dudas Paso a las dudas que no son pocas: 1) Según comentas, los tipos Enum, sirven para almacenar valores que a su vez no se pueden modificar; interpreto que esto no es como un array de tipo String en el cual contenga los valores MINI; MEDIANO,....etc y que se podrian modificar verdad? 2) Cuando haces: Enum Talla{MINI, MEDIANO, GRANDE, MUY_GRANDE} Todos los valores en mayúsculas que representan? Son Objetos, son el nombre de constantes y por ende constantes, son variables,...? no lo acabo de ver claro por eso hago la pregunta 3 y porque asocio los tipos Enum como si fuesen arrays y creo que no son lo mismo no? 3) Si realizáramos: final String[] Talla = {“MINI”, “MEDIANO”, “GRANDE”, “MUY_GRANDE”} por declarar tallas como un array de String de constantes estos tampoco se pueden modificar, luego no seria el funcionamiento idéntico a los enum? O no seria lo mismo? 4) Si cuando realizas Enum Talla{MINI, MEDIANO, GRANDE, MUY_GRANDE} los nombres en mayúsculas representan que son constantes y según el video al realizar: Talla s = Talla.MINI; si posteriormente realizáramos un System.out.println(s); este nos devolvería la constante (valor) MINI verdad? 5) En la siguiente parte del video (que es donde casi me das la estocada) public class Uso_Tallas { enum Talla { private String abreviatura; MINI(“S”), MEDIANO(“M”), GRANDE(“L”), MUY_GRANDE(“XL”) private Talla(String abreviatura) { this.abreviatura = abreviatura; } } } Vuelvo a lo que me esta matando, los valores en mayúsculas que son? Variables, objetos..? si te das cuenta es la misma pregunta qué la 2 y es lo que no me queda claro 6) Según tu el constructor del tipo enum private Talla(String abreviatura) { this.abreviatura = abreviatura; } recibe un parámetro de tipo String llamado abreviatura que según comentas recibirán los valores S, M, L, y XL; es decir, seria como lo siguiente: private Talla(“S”) o seria private Talla(MINI(“S”))? para finalizar lo que tampoco acabo de pillar es cuando dices que por una parte asociamos el nombre del objeto por ejemplo: MINI(“S”) y la abreviatura del objeto? Con quien haces la asociación y en donde? La asociación se hace en: this.abreviatura = abreviatura; this.abreviatura representa el nombre del objeto que en este caso seria MINI y al lado de la asignación seria la “s”; es decir seria: MINI = S; 7) Según la instrucción Talla la_talla = Enum.valueOf(Talla.class, entrada_datos); y tu explicación esto nos devolverá el nombre de la Constante enumerada; es decir, si el usuario introduce grande esto nos devolverá GRANDE Vuelvo a la pregunta de antes los nombres en mayusculas del tipo MINI o MINI(“S”)...etc que representan, porque parecen que sean CONSTANTES, VARIABLES, o OBJETOS? Menuda empanada que ahora tengo PD: Agarraos los machos todos los que sigamos el curso que empiezan las curvas :)
Definitivamente la clase que mas se me ha complicado, sigo sin entender :( No entiendo por qué devuelve la abreviatura. Actualización: Ya entendí !!! ¡Gracias Juan, por este curso! :) En definitiva es como escribir Talla..dameAbreviatura() Solo que el tipo se lo pasamos por la consola gracias al método de la clase «Scanner» tipos: Lo veré una vez más para quedar satisfecho!
Como te explico, que soy muy feliz, porque intenté 34 veces, y me salió en la 35 jajajajaja, intenté crear una clase aparte, y le doy uso en la clase "uso_talle". Resulta que no me salia, porque habia puesto "MIN" en lugar de "MINI", y cada vez que ingresaba mini, me daba error :)
Conceptos algo complejos los de este video. No se explicó tan bien como cuando nos trató de explicar graficamente que un hijo hereda de su padre y este a su vez del abuelo..jajaja. En cualquier caso, enhorabuena por el trabajo que hace, es brillante!
Una pequeña recomendación para quien quiera es que en el minuto 18:40, en vez de usar el valueOf de esa manera que a lo mejor resulta un poco lioso podemos hacer lo siguiente : Talla la_talla=Talla.valueOf(entrada_datos); De esta manera lo que estamos haciendo es decirle a nuestro programa directamente que estamos usando la clase Talla sin tener que especificarlo después pasando dos parámetros al método valueOf, no es gran cosa pero alomejor os ayuda a no liaros de porque llama Enum.valueOf() y verlo de manera más sencilla.
Wooow, esto fue difícil de entender jeje y al leer los comentarios me sentí mejor jajaja porque no fui el único que le costo entenderlo, tuve que devolver el vídeo muchas veces, me acoste a dormir y lo vi al otro dia otra ves jajajajaja, logre aclarar mejor mis dudas cuando quise utilizar la clase JOptionPane solo para practicar un poco ya que me gusta mas que la clase Scanner para obtener el dato de entrada, entonces me daba error y era porque tenia que convertir el string a mayúsculas entonces quise convertirlo aplicando directamente toUpperCase(); directamente a la variable "entrada.toUpperCase();" entonces me seguía dando error, en eso me di cuenta que tenia que crear otra variable donde almacenar la cadena convertida a mayúsculas entonces fue que comprendí por que la necesidad de hacer esto: talla la_talla=Enum.valueOf(talla.class, entrada); no se si me di a entender espero que si jeje, Saludos desde Venezuela... Un millón de gracias por este curso !!
Hola profesor! Que curiosa esta clase "enum", por un lado debes instanciar un objeto Talla del tipo enum, y por otro declarar una variable "s" del tipo Talla. He leido por ahi que implicitamente lo que uno hace es crear una nueva clase llamada Talla. Esto me ha quedado claro. Tambien es curiosa la estructura que tiene esta clase, tan diferente a las demas. Lo que no me quedo claro es que tan necesario es el uso del metodo Enum.valueof ? si lo que guardo en el objeto "la_talla" es lo mismo que ingresé en "entrada_datos" (min 19:39) Saludos!!
+Juan Jose Camussi Hola !! Sí, tienes razón. A estas alturas del curso plantear el uso de este tipo de clases puede ser un poco desconcertante... Todo se aclarará (eso espero) cuando llegues en el curso a la parte de programación genérica. El método valueOf devuelve la constante del tipo enum correspondiente. La explicación sería farragosa hacerla por escrito así que te planteo que si después de ver la programación genérica sigues teniendo la duda, me la vuelvas a plantear. Un saludo
+Martí Serra Estoy en ello. De momento solo dos para los que empiezan, pero iré subiendo más. En mi web los tenéis www.pildorasinformaticas.com (sección ejercicios) Un saludo
Este es el video más complejo que he estudiado hasta ahora. Hay un momento en que te pierdes en la explicación, pero creo que es porque no asimilamos con total claridad lo que es un tipo enumerado.. y aún asimilandolo solo entiendo con claridad el ejemplo básico... Donde lo que estamos haciendo es crear un tipo propio de datos.. Algo que nosotros creamos desde 0.. y ese tipo ni es un String, ni un int, ni nada que exista. Es nuestro tipo de datos enum. Pero los ejemplos más elaborados aún me cuesta asimilarlos.
Hola a todos, para los que reclaman ejercicios. Y con el permiso de nuestro profesor. www3.ntu.edu.sg/home/ehchua/programming/java/J2a_BasicsExercises.html www3.ntu.edu.sg/home/ehchua/programming/java/J3f_OOPExercises.html www3.ntu.edu.sg/home/ehchua/programming/java/GraphicsExercises.html Están en inglés, pero con la ayuda de google translator, no creo que haya problema. En todo caso creo que están bastante claros. En los ejercicios tenemos "el esqueleto" y se trata de completarlos nosotros. Saludos.
Hola profe, mi conslta era con respecto a la declaracion de la clase Talla , esta se crea del siguiente modo: enum Talla{ } ahora, cuando llama al metodo valueOf lo hace de la siguiente manera: Talla latalla = Enum.valueOf(Talla.class, entrada_datos); la pregnta seria: ¿por que para declarar esta "clase" Talla usa enum con la e en minuscula y para llamar al metodo usa Enum con E en mayusculas? ESTA DUDA YA FUE RESPONDIDA, MUCHAS GRACIAS! ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- AHORA, COMO SERIA PARA STRING??? ya que en c/c++ se usa en minusculas, cual seria la direrencia acá? desde ya, muchas gracias profesor, excelentes clases.
Una pregunta un poquito personal, he buscado y me han divariado mucho, entonces queria preguntarte. Realmente tienes que saber matemaicas como precalculo, calculo diferencial e integral para ser un buen programador? O mas bien aplicar como resuelves problemas maticamente en la programacion, que seria mas de logica. Gracias
Cuantas más matemáticas sepas a la hora de programar, mucho mejor. Pero no es necesario tener conocimientos de derivadas, integrales etc. Es más bien lo segundo que comentas tú, es decir, tener una "mente matemática" para resolver problemas. Lo que ocurre es que quien suele tener este tipo de entrenamiento son los que han estudiado más matemáticas. Un saludo!!
Buenas. No conocía esas capacidades de crear method construct dentro de los ENUM, ahora me surgió una duda en el minuto 18:00 donde pasas 2 parámetros al método Enum.valueOf(Talla.class , entrada_datos); He entendido que le pasas "La CLASS a la que pertenece , nombre_de_var_delScanner " pero no entiendo el porque de usar la sintaxis: " Talla class, ". ¿Porqué se usa el class después del nombre de la Clase.? Este enum es bastante más complejo que en otros lenguajes jeje, que ventajas tiene usar los construct dentro del ENUM a usarlos como siempre lo hemos realizado en los vídeos. Gracias a todos los que puedan aportar. Saludos Juan.
Hola juanpamontoyav: En lugar de: Talla LaTalla = Enum.valueOf(Talla.class, EntradaDatos); Podemos usar: Talla LaTalla = Talla.valueOf(EntradaDatos); Funciona igual que el anterior, con la diferencia de que se escribe menos:
inclusive no hace falta instanciar, simplemente llamar Talla.valueOf(EntradaDatos); en el syso, de alguna manera el método valueof llama al constructor.
Saludos, profesor: Excelente vídeo, todo fue muy claro para mi cuando empecé a ver a las variables del enum como objetos y no como un String. Siempre busco entenderlo todo, sin dejar pasar nada y tengo la siguiente duda: En el método estático valueOf: Enum.valueOf(Talla.class , entrada_datos); Entiendo que el primer parámetro hace referencia a la clase que pertenece, pero ¿por qué se usa el ".class"? ¿Qué pasaría si se coloca únicamente "Talla"? ¿Qué otro uso tiene este ".class"? Gracias de antemano, profesor. Saludos.
si lo escribes así se vuelve más fácil de comprender: Talla.valueof(entrada_datos); no hace falta volver a instanciar Talla la_talla pues el método valueof ya llama al constructor.
Lo cierto es que esto de los enum sería de valor interesante para hacer pseudo IA, al fin y al cabo solo te interesa unos valores concretos ante los que actuar. Luego ya vendría de desarrollar otra parte que traduzca casi infinitos valores a esos pocos.. Todo esto dicho sin tener ni idea de IA, por supuesto!
+Diegobk Benitez Hola !! Me han preguntado varias veces por el tema de la recursividad. Lo trataré en el curso. No se dónde lo voy a meter pero lo veré. Un saludo
si no lo mal entendí, según yo esto de los tipos enumerados es como la validación de datos en excel en e que estableces que en las celdas solo se puedan escribir ciertos valores, solo que aquí seria dentro de una variable no?
yo puse primero sin querer System.out.println(" la abreviatura es "+LaTalla.Abreviatura); y funciono,pero supongo es porque el metodo main esta en la misma clase, de haber creado otra clase y desde ahi poner esa linea,supongo si me habria dado error de modificador de acceso y tendria que usar LaTalla.getAbreviatura();
+ASURAPRIEST19 Hola !! No recuero de qué hice en este vídeo, pero efectivamente si estuvieras en otra clase y la variable Abreviatura estuviera encapsulada, necesitarías un método de acceso (getter). Un saludo
Hola Que tal, antes que nada gracias por este curso que lo vengo siguiendo y me encanta la forma en que lo das. Una duda, como debería hacer si quiero buscar por abreviatura en el enum en lugar de por la palabra mini, mediano, etc de lo que ingresa el usuario?? Muchas gracias!
El que te habla en los vídeos es de tu quinta. Hay mucha gente joven por aquí a la que le cuesta programar. Aprender un lenguaje de programación desde 0 como Java, es algo que requiere mucho esfuerzo a cualquier edad. Tener que ver un vídeo varias veces, o tener que leer un concepto de programación en un libro varias veces, es algo muy normal. Igual que buscar varias horas un error de sintaxis en el código. Luego los hay afortunados que con leer y ver una vez es suficiente. Pero estos no son normales. El resto si lo somos. Un saludo!!
Buenas tardes profe :) una pequena duda que tengo: la clase enum que utiliza para instanciar Talla es la misma que clase Enum que ocupa para llamar al metodo valueOf().. ?? Por que entonces se escriben diferente ? Me ha ayudado muchisimo con sus videos!! Muchas gracias.
Ok visto !! Sí, esto es lo de los tipos enumerados. Bueno, pues estamos de nuevo ante una clase "especial" de Java y la verdad es que no hay explicación por la cuál haya que especificar el tipo en minúsculas (enum). Si entramos en la API, la clase Enum comienza en mayúsculas y sin embargo el tipo se especifica en minúsculas. En la documentación oficial de Java simplemente dicen que lo pongas en minúsculas, así que debe ser por convención. Aquí el enlace de la web de oracle donde lo explican: docs.oracle.com/javase/tutorial/java/javaOO/enum.html En definitiva es una regla de sintaxis más que no obedece a explicación y que se debe aprender. Quizá lo hicieron para diferenciar de alguna forma los tipos enumerados del resto de tipos "normales" de Java. Un saludo
Hola, gracias por el contenido. Tengo una duda, en las opciones de talla, la talla muy grande lleva un guion bajo, a la hora de que el usuario introduzca ese valor por consola si no utiliza el guion bajo da un error. Igual que IgnoreCase se utiliza para las mayusculas, Que puedo utilizar para que el guion bajo no sea un problema. Gracias de nuevo.
Sin el método getter funcionaría también, ya que en el main hemos instanciado la_talla, digamos, un objeto que es de tipo enum, con lo cual nos deja acceder a los campos de clase, en este caso a abreviatura. Syso("Abreviatura= " + la_talla.abreviatura).
Hola profe, como intento siempre desarmar y armar, tratando de ser un tanto a mi manera a la vez me demuestro que he captado su explicacion, pues ...mi propia version..cambiando las posiciones, las Letras, los out.prntln, en fin ..para variar !!!! muchisimas gracias por su dedicacion, gracias // version asumida...saludos import java.util.Scanner; public class use_Size { // enum size { // small, medium, large, X_large // }; enum Size { // SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRAL("XL"); S("Small"), M("Medium"), L("Large"), XL("Extra Large"); String abreviature; public String show_abreviature() {// getter return abreviature; } // private Size(String abreviature12) { Size(String abreviature1) { this.abreviature = abreviature1; } } public static void main(String[] args) { System.out.println("Please enter a Size: S, M, L, XL"); Scanner enter = new Scanner(System.in); String enter_data = enter.next().toUpperCase(); Size the_size = Enum.valueOf(Size.class, enter_data); // pricipal objetivo del video : Valores enumerados Ej.. S("Small")... // de la clase enum Size{ System.out.println("Size: " + the_size + " , definition: " + the_size.show_abreviature()); // System.out.println("abreviatura = " + the_size.show_abreviature()); enter.close(); // quizas hace 8 años no era necesario, pero cada vez que se usa scanner se exige : // ___.close(); } } PD. donde he commentado // la linea es para dejar claro que ambas opciones son validas..🔛
Buen día, una pregunta por que razon Eclipse me marca error al insertar esta linea: enum Talla {MINI, MEDIANO}; será por la version del Eclipse o algo por el estilo?. Gracias de antemano por la respuesta y felicidades por este gran curso.
Hola Francisco: No es por la versión de Eclipse. Es que, según lo que posteaste, has tecleado: enum Talla {MINI, MEDIANO}; Y en cambio debes poner: enum Talla {MINI, MEDIANO} O sea, quita el punto y coma al final.
saludos, me surgió una pregunta hace alguno videos atras, me gustaria saber como se hace para almacenar los datos introducidos en en programa, que incluso despues de cerrarlo yo pueda recuperar esos datos (o mas bien informacion) y poder segir manipulándola, desde ya muchas gracias, excelente curso
Erik Leonel Valdez Hola !! Pues eso lo veremos cuando tratemos el tema de JDBC La solución estaría en almacenarlo en una BBDD o fichero externo. Un saludo
Buenas Juan, tengo una duda simple. Justo en el minuto 3:53, cuando borras el texto, te aparece la barra/cursor de escribir en negro, y luego supongo que presionas alguna tecla para que se te ponga otra vez normal, en el minuto 3:57. Este cursor/barra de escribir en negro es muy molesta ya que al escribir, si quieres escribir delante de un texto, se sobreescribe este texto. Supongo que será una pregunta tonta, a veces me ha pasado y debo cerrar la clase y volver a abrirla para quitarlo, con que atajo de teclado se quita? No se si me he esplicado, pero muchas gracias de antemano, y gracias por los videos claro:)
+Scrypt 99 Esto es porque pulsaste sin querer la tecla "Insert" de tu teclado como me pasó a mi en el vídeo. Con volverla a pulsar es suficiente. Un saludo
Disculpa Juan, Esta afirmación se puede decir que está correcta? ROJO es un objeto de la clase Enum Color. ROJO es un objeto que se almacena una parte de la memoria ram, en la pila de memoria, se puede hacer uso de los valores almacenados en la memoria a través de una dirección de memoria por ejemplo en el espacio 0x08BA, a su vez este objeto puede tener x cantidad de atributos\fields almacenados en ese espacio de memoria. // ROJO es un objeto que se inicializa con el constructor TelaColor donde se le pasa los atributos color, codigo y tipo, el operador this lo que hace es referencia al espacio de memoria donde está almacenado el objeto ROJO (o el objeto que corresponda) de tipo enum, ejemplo this -> 0x08BA para ROJO, en ese lugar de la memoria a su vez se ubica los atributos color, codigo, tipo) public enum TelaColor{ ROJO ("Rojo Ferrari", 7, "Importado"), //invoca al constructor y le pasa los argumentos para ser almacenados en la RAM AZUL("Azul Claro", 2, "Nacional"); private final String color, tipo; private final int codigo; TelaColor (String color, int codigo, String tipo){ this.color=color; this.codigo=codigo; this.tipo=tipo; } } Data Memory (RAM) Address "Rojo" 0x08BA ROJO. color this.color 0x08BA.color El operador this señala la direccion de memoria donde se almacena el atributo\field 7 0x08BA ROJO. codigo this.codigo 0x08BA.codigo this = 0x08BA "Importado" 0x08BA ROJO.tipo this.tipo 0x08BA.tipo "Azul Claro" 0x08C0 AZUL. color this.color 0x08C0.color 2 0x08C0 AZUL. codigo this.codigo 0x08C0.codigo this = 0x08C0 "Nacional" 0x08C0 AZUL.tipo this.tipo 0x08C0.tipo
Saludos de nuevo, una pregunta, La programacion orientada a objetos, es la misma en todos los lenguajes, static, this, etc es lo mismo en php en c# en js? O tiene algunas diferencias
El concepto sí, la sintaxis es lo que cambia. Una variable static es lo mismo en todos los lenguajes orientados a objetos. Lo mismo con la instrucción this etc. Cambia la forma de utilizarlas (sintaxis). Un saludo!!
gracias por todo, una pregunta porque al inicio se declara enum con minuscula, y en el otro caso esta Enum-->en este esta entendido que es una clase pero porque el otro en minuscula si lo pones igual da error
Hola, primero, muchas gracias por los conocimientos que brindas! segundo, la consulta, cuando abro eclipse aparece este mensaje que no me deja continuar "An error has ocurred. See the log file C:\....JAVA\.metadata\.log." me podrías ayudar a solucionarlo? o indicarme dónde debo buscar? Muchas Gracias!
Muchísimas gracias por el tutorial. Tengo una duda puntual: ¿Por qué la clase enum empieza con minúscula?, no se supone que el nombre de todas las clases en Java deben empezar en mayúscula.
Gracias por el comentario. Los enum no son clases. de hecho nunca los verás con la palabra class delante: class enum.... Esto no existe. Los enum son tipos, unos tipos que puedes crear tú mismo pero no clases. por este motivo no empiezan por mayúsculas. Un saludo!
Buenos días profe, me surge la siguiente duda, siendo enum una clase, por qué el nombre de esta empieza por una letra minúscula, en todo caso debería llamarse Enum, tal como se muestra en la documentación de las API de Java.
Elvis Espinoza Todo se debe a que la clase Enum es diferente a las demás clases de la API y por eso no sigue las mismas regñas que las demás. Se trata de una clase especial que limita las instancias que se pueden crear de la clase a las específicadas en la implementación de la clase. Además, a diferencia del resto de las clases, en el caso de llevar constructor este debe ser privado para no poder crear más instancias que las especificadas en la implementación de la clase. Un saludo
Un saludo :) Osea que es obligatorio declarar enum dentro de la misma clase antes del main?, así como los constructores?,......si yo creo una clase principal y una subclase podria crear el enum en la principal pero los constructores en una subclase?, o no se puede?, lo digo para no pelear con el código en vano :)
Saludos profesor! Quisiera saber en que momento el contructor hace su trabajo, es decir en que linea de códido del método main hace que el constructor haga la asignación de la abreviatura? ¿Seria en esta linea de código? Talla la_talla = Enum.valueOf(Talla.class, entrada_datos);
Buenos días profesor, me ha surgido una duda en el minuto 19:55, y es que no entiendo por qué aún cuando la variable abreviatura declarada dentro del enum se salta la encapsulación aún cuando la declaro como private , me explico, Eclipse no da error al escribir la_talla.abreviatura , lo cual está incorrecto.. Desde ya muchas gracias, su curso me ha servido mucho. Un cordial saludo.
Bastian, lo que pasa es que sigues estando en la misma clase, es decir enum Talla esta dentro de la clase Uso_talla, entonces como se esta llamando en la misma clase, el uso de PRIVATE es aprobado, a menos que enum estuviera en otro archivo ahí si no se podría... saludos.
+aquiles losada Pues la verdad no lo se. No lo he leído nunca. Pero ya te anticipo que el título es mentira a no ser que seas un privilegiado mental. Ya nos contarás qué tal el libro. Un saludo!!
Si en lugar de usar la entrada en línea de comandos, usamos cuadro de diálogo quedaría así, en una sola línea: String entrada_datos =(JOptionPane.showInputDialog("Escribe una talla: MINI, MEDIANO, GRANDE, MUY_GRANDE")).toUpperCase(); Por supuesto habiendo importado antes: import javax.swing.*;
✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅
🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀
🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀
💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
Otra vez este video es otro de los que me costó trabajo entender, pero finalmente lo entendí. En resumen, cuando declaramos una enumeración, por ejemplo así: enum colores {ROJO, VERDE, AZUL} lo que se hace realmente es crear un nuevo tipo de dato (por decirlo de alguna forma) que se llama "colores", por lo tanto, "colores" es un tipo de dato enumerado. Entonces, la siguiente instrucción: colores mis_colores; la variable "mis_colores" es una variable de tipo "colores", o sea, de tipo enumerado, que sólo permitirá los valores ROJO, VERDE y AZUL, y para asignar estos valores se tiene que hacer a través del tipo de dato "colores", así: colores.Rojo, colores.VERDE o colores.AZUL, porque los valores ROJO, VERDE y AZUL no son de tipo "String" ni nada de eso, son de tipo "colores", o sea, forman parte de una enumeración, son de tipo enumerado, son una enumeración!!! y además siempre se acceden a través del tipo de dato enumerado (colores) porque son propiedades privadas (por decirlo de alguna forma) y por tanto no son accesibles fuera de la declaración de la enumeración, por ejemplo, desde una variable de tipo "colores".
El segundo ejercicio es más difícil de entender, les recomiendo que lo tengan a la vista a la par que leen lo siguiente. Cuando se crea el tipo enumerado "Talla" con su método constructor, con su método "getter" y con su propiedad "abreviatura", significa que cada valor de la enumeración (MINI, MEDIANO, GRANDE, MUY_GRANDE) tendrán una copia del constructor, del método "getter" y de la propiedad "abreviatura", por ejemplo, si creamos la siguiente instrucción:
Talla t = Talla . MEDIANO;
La variable "t" es de tipo "Talla" (de tipo enumerado) y está preparada para recibir los valores MINI, MEDIANO, etc., que son valores enumerados (accesibles a través del tipo de la enumeración). En este caso, a la variable "t" se le está asignando el valor enumerado MEDIANO, pero no sólo eso, si no que además se está invocando al constructor pasándole como argumento la cadena "M" y dentro del constructor se almacena la cadena "M" en la propiedad "abreviatura". Entonces, la variable "t" es en realidad un objeto que contiene 3 cosas: el valor enumerado MEDIANO; la propiedad privada "abreviatura" (la cual almacena la cadena "M"); y el método "getter" que devolverá el valor de la propiedad "abreviatura". Por lo tanto, la siguiente instrucción:
System . out . println ( t + "(" + t . dameAbreviatura () + ")") ;
Imprimirá lo siguiente por consola:
MEDIANO(M)
Otro ejemplo:
Talla t1 = Talla . MINI;
Talla t2 = Talla . MUY_GRANDE;
Las variables "t1" y "t2", como ya mencioné anteriormente, tienen una copia del constructor, del método getter y de la propiedad "abreviatura". La instrucción "Talla . MINI" invocará al constructor pasándole la cadena "S" para que la almacene en la propiedad "abreviatura" y almacenará en "t1" el valor enumerado MINI. La instrucción "Talla . MUY_GRANDE" invocará al constructor pasándole la cadena "XL", éste almacenará dicha cadena en la propiedad "abreviatura" y finalmente almacenará en "t2" el valor enumerado MUY_GRANDE. Si se imprime la información de ambos objetos por consola, así:
System . out . println ( t1 + "(" + t1 . dameAbreviatura () + ")") ;
System . out . println ( t2 + "(" + t2 . dameAbreviatura () + ")") ;
En consola se imprimirá lo siguiente:
MINI(S)
MUY_GRANDE(XL)
Observación curiosa: en el minuto 19:57 del video aparece en el asistente de Eclipse la propiedad privada "abreviatura", ¿no se supone que no debe de salir porque es privada? ¿y sólo es accesible dentro de la enumeración? Mi única respuesta por ahora sobre esto es que las enumeraciones al no ser clases tal vez el comportamiento de los modificadores de acceso es diferente.
Gracias.
Bien desgranado. El único "problema" del vídeo es que se explica muy sobre la marcha que una constante enum puede tener campos (que de primeras resulta extraño) y que el comportamiento de asignación y recuperación es como el de una clase, que aplica a cada uno de esos elementos constantes.
@@Rebeu-xr3xq Mucho texxxto
ChatGTP me dio esta respuesta, al dia de hoy sabes por que?
The reason for this is that enums in Java are a special type of class, and their instances are treated like static final fields. This means that the fields of an enum instance, including private fields, can be accessed directly from outside the enum, just like accessing the fields of a regular class's static final fields.
Cuanto entusiasmo, mola ver gente así
Oscar Ballart: Voy a intentar resolver tu batería de dudas:
1) Efectivamente no se trata de un Array, sino de una clase (Talla) que posee en nuestro ejemplo cuatro ejemplares (MINI, MEDIANO, GRANDE y EXTRA_GRANDE) denominados "Constantes enumeradas" en la que no se pueden añadir más ejemplares a posteriori.
2) Los valores en mayúsculas se definen como "Constantes enumeradas". No son Arrays, fuera esa idea de la cabeza!
3) Al escribir final String[] Talla={“MINI”, “MEDIANO”, “GRANDE”, “MUY_GRANDE”} lo único que estás haciendo es impedir que se pueda redefinir el Array en el futuro como por ejemplo: Talla =new String[7]; ya que ha sido declarado como final. Pero si que puede hacer lo siguiente: Talla [0]="EXTRA_GRANDE" a pesar del final. La solución para no poder modificar los valores almacenados en un Array pasaría por almacenar objetos inmutables (hablaremos de ello).
4) CORRECTO !!
5) La definición correcta que te darán todos los libros es "Constantes enumeradas". Son en definitiva ejemplares de clase pertenecientes a la clase enumerada Talla. Creo que a estas alturas de curso, todos sabemos lo que es un ejemplar de clase. ¿Por qué entonces la definición de constante enumerada? "Constante" porque no pueden cambiar una vez definidos (no existe ni podrá existir Talla.MEGA_GRANDE) y "enumerada" porque la clase Talla hereda de la clase enum de la API Java. Siempre que crees en tus programas un tipo enumerado, estás heredando de la clase enum de la API. Por tanto podrás utilizar todos los métodos pertenecientes a enum reflejados en la API (tal y como hacemos en nuestro código con valueOf por ejemplo)
6) private Talla(MINI(“S”) . El this hace referencia siempre al parámetro implícito. Como siempre intento utilizar la menor "jerga" de programación posible para no asustar a nadie, yo hablo de objeto cuando me refiero al parámetro implícito. Es decir, el this hace referencia al objeto. En la instrucción this.abreviatura=abreviatura, el this hace referencia al campo de clase abreviatura (la variable abreviatura del objeto), mientras que abreviatura a secas hace referencia al parámetro del constructor. Es por este motivo por el cual realmente es Talla.MINI("S").
Cuando construyes una constante enumerada, estás invocando al constructor (al de la clase enum de la API si no has declarado tú otro constructor, o al que has creado tú como es nuestro caso). Al escribir enum Talla{ MINI("S")....... ahí ya hemos invocado (llamado) al constructor (private Talla (String abreviatura){...}) ¿Dónde se asocia la "S" a la constante enumerada MINI?? Precisamente al invocar al constructor: en MINI("S"). La "S" viaja al parámetro del constructor (explícito) y se almacena en abreviatura. De esta forma queda asignada la "S" a la constante que invoca (llama) al constructor, en este caso MINI.
7) Esta duda se arrastra de antes. Son constantes enumeradas
Este vídeo lo puse como respuesta a una petición que me hicisteis varios de vosotros. Estoy dudando de si lo he subido en el momento adecuado, tal vez debí esperar a avanzar un poco más. No os preocupéis si no se ha entendido este vídeo. No influye en el desarrollo de los siguientes. Suelen poner cosas de tipos enumerados en los exámenes de certificación (OCPJP de Oracle).
Saludos !!
A mi me ha parecido el vídeo más difícil hasta el momento. Lo dejaré un poco a un lado para ver si más adelante lo entiendo.
La verdad, que un poco más difícil sí que es. Hay que tener muy claro conceptos anteriores(Herencia, instanciar Objetos, etc.). Me parece que haces lo mismo que antes, pero con una sintaxis un poco diferente al tratarse de una Clase enum ¿no? ¿Puede ser que sea como un tipo de Encapsulación, mucho más restrictiva, que cualquier modificador de acceso?
Muchísimas gracias por responder. Muchas de las dudas que has contestado las tenía yo también. Ahora toca estudiarlo bien :-)
pildorasinformaticas Gracias por tomarte el tiempo es contestar a todo. Creo q a mas de uno nos ha venido bien, xq para mi de los 48 videos q llevo, ha sido el de mas dificil comprension, y las duas mas o menos vienen q ser las mismas. Un saludo!
pildorasinformaticas Hola, buenas noches:
Ante todo, darle mi más sincera enhorabuena por este curso. Estoy siguiéndolo y me parece genial. Todo muy bien explicado y de forma incremental con una curba de aprendizaje (hasta ahora) muy asequible al menos para mí.
Este ha sido el único vídeo en el que he tenido algún problema a la hora de seguirlo, pero debo decirle que es por motivos estrictamente personales.
Me gustaría aprovechar y hacerle una consulta, aunque no está directamente relacionada con el tema del vídeo.
Llevo dándome cuenta, desde que empecé hace unos días a ver los vídeos, que cuando utilizo la clase Scanner para crear un objeto, pese a que posteriormente hago uso de él como es en este caso para obtener la respuesta del usuario por consola, en la línea de declaración del objeto entrada (o como se le llame) me marca un error. ¿A que se debe y cómo solucionarlo?
disculpe que le ponga esta cuestión por aquí, pero es la primera vez que comento uno de sus vídeos.
Mil gracias de nuevo por todo su trabajo. siga así.
Un saludo.
Hasta ahora esto ha sido lo mas complejo de entender, pero se ha comprendido a base de repetir el vídeo 500 veces. Saludos y Gracias.
- Hijo, qué es eso de enum, que drogas estás tomando?
- Se llaman pildoras
- qué pildoras?
- informáticas
- me tomas el pelo?
- Eso te lo diré en la próxima entrega. Hasta entonces, que te vaya bien XD XD
:)))))))))))
@@NelsonTuesta No
buenísimo jajaja
XD
La verdad que este es el primer vídeo que me ha costado un poco, pero tocando un poco el código y retrocediendo el vídeo un poco, lo entendí. No aguanto a llegar al final del curso y empezar con Android. Muchas gracias por el tiempo y el esfuerzo que dedicás para hacer este tipo de vídeos. Saludos desde Argentina.
Este ha sido el tema mas complejo hasta ahora!!
Con razón se me ha complicado, pero bueno, como todos los temas, toca tenerles paciencia para llegar a entenderlos
El primer video que me deja medio K.O....también es verdad que llevo viendo uno tras otro desde primera hora de la mañana y son las 19:00....mañana lo veo otra vez mas fresco, saludos!
Muchas gracias por todo el tiempo y dedicación que pones en estos cursos. Además de darle al "me gusta" pensaba qué más podría hacer para devolverte una parte de lo que me das y me alegró ver el botón "Donate" en tu web.
Muchas gracias de nuevo
+Natalia pamplona Pues muchísimas gracias por el comentario y por seguir mis vídeos. Me alegro de que te guste mi trabajo. Un cordial saludo
Increible lo bien que explicas y lo claro que queda todo con los ejercicios contraejemplos etc. Mil gracias de verdad
+Miguel Ferreira Gracias por el comentario. Me alegro de que te guste. Un saludo
Muchas gracias por tu trabajo, es magnifica la forma en la que explica cada tema. Creo que este curso vale oro y es mucho mejor que varios cursos presenciales que cuestan mucho dinero, y usted aquí nos lo ha dejado totalmente gratis. Lento pero seguro voy avanzando y espero luego seguir con su curso de programación en Android. Saludos desde Argentina.
Muchisimas gracias por el comentario. Me alegro de que te guste el curso y espero que sigas avanzando lento pero firme. Un saludo!!
Buenos videos. Este video es el primero que voy a tener que verlo 2 veces.
Por si le sirve a alguien, las clases MINI, MEDIANO, GRANDE Y MUY GRANDE deben estar en mayúsculas al definirlas al inicio en la Clase ENUM, si las escriben en minúsculas les dará error
o tambien puedes cambiar el "toUpperCae()" por "toLowerCase()" si es en minusculas (si vas a usar mayusculas o minusculas simplemente quitarlo)
@@gerardoruizmendezc7242 CORRECTO!
Muchas Gracias en mi caso puse "ExtraGrande" tal cual y opte por quitarlo no entendía por que je...
me habeis salvado muchas gracias
Me salvastes con ese comentario, no sabia en que me equivoqué, gracias
Estoy empezando este video, sin embargo hasta ahora todos los anteriores han sido excelentemente bien explicados, eres brillante Juan, muchas gracias !!!!
Por el momento es el video que mas tiempo me ha llevado dominar ya que nunca lo habia visto antes, pero es muy interesante!!
Bueno, he llegado al vídeo 48, y fin del bloque POO.
Excelentes vídeos y excelente profesor, de esta manera es un placer aprender Java.
+Lluís Peiró Muchas gracias por el comentario. Me alegro de que te gusten los vídeos. Un saludo!!
Tema complejo, pero con un ejemplo claro se entiende perfectamente. Muchas gracias !
Como siempre profe su pedagogía impecable, saludos desde Argentina.
Fabulosa explicación del tipo Enum.
Gracias por su tiempo y dedicación.
+Sinno mbre Qué lástima que no se puedan dar más de 1 like..
+Sinno mbre Gracias a ti por seguir mis vídeos. Saludos!!
¡Buenísimo vídeo, Juan! Yo ya sé Java, pero tenía duda de cómo funcionaba este tipo de objeto y lo has explicado súper bien. ¡Muchas gracias!
Uff se me hizo un balurdo barbaro =( , sobre todo la segunda parte jeje, pero no me desanimo, seguire adelante... ya volvere a ver la luz. Gracias Profe.
Repetir repetir.... y Si ya lo he entendido mejor, estos días los he repetido desde el 45 al 60 y poco a poco me quedan más conceptos. :)
Grandes tutoriales!!!!
+juanpamontoyav Gracias por el comentario y enhorabuena por tu perseverancia. Un cordial saludo
Para mí, personalmente, la clave para entender el segundo ejemplo fue que, hasta este punto del curso, estábamos acostumbrados a que el constructor sirva para instanciar objetos.
Sin embargo, en los enum no se pueden instanciar objetos nuevos, sino que todos los que existen ya están instanciados en la lista que vemos.
Entonces, ¿para qué crear un constructor con un parámetro? Bueno, porque es una excusa para asociar los objetos, en este caso de tipo Talla, a un atributo o característica propia que más tarde nos pueda venir bien obtener con un getter.
Con esto ya se me hizo la luz y pude comprender el vídeo. Lo comparto por si a alguien más le ayuda. Al final enum Talla es parecido a decir class Talla, sólo que no podemos instanciar objetos Talla, sino que todos están ya instanciados.
Cuando decimos MINI("S"), o MEDIANA("M"), es como decir que esos objetos se han instanciado con ese parámetro. Si tú pudieras usar ese constructor y metieras el parámetro S, te crearía el objeto MINI.
clase 48 y tamos ready. mejor entendido imposible
Hola muy buen vídeo, gracias por poner los cursos en línea de fácil acceso, no te había escrito, pero creo que es el momento oportuno, tu trabajo es genial, hace tiempo, ya muchos ayeres vi Java en la universidad, y por cuestiones que retome un proyecto regrese a programar, al principio del curso me dormía, no te lo voy a negar, pero llegado a este punto, me emocione, por fin llegamos al pantano y nos empezamos a sumergir en el lodo y fango denso que es Java, y me da gusto que sea de la mano de un profesional como tu, terminando este curso me gustaría que me dieras asesorías personalizadas; pero para eso aun falta. Gracias
Excelentes Vídeos , he aprendido muchísimo y no he llegado ni a la mitad del curso
Este es el vídeo que me ha costado mas de los 48 que llevo. Algún día llegare a Java EE, algún día!
Seguro que si. Mucho ánimo !!
¿Ya has llegado? :P
Y por donde vas?
Explican muy bien. Gracias, solo me he visto parte del vídeo 4:08 y ya se me han aclarado algunas dudas. Gracias nuevamente. EL tema de los Sockets también me sirvió mucho.
Muy interesante, sigo con el curso aprendiendo cada vez mas y mas.
Complejo este tema, hasta ahora es el único video en el que he tenido que volver a verlo para entender
Yo ni aún así. Espero entenderlo todo mejor más adelante.
A mí me resultó más difícil el anterior, de los modificadores de acceso.
Como siempre, muchas gracias Juan.
Gracias a ti por seguir mis vídeos. Un saludo!
Profesor, en este vídeo si me a costado captar y de hecho aun tengo lagunas. Me puse en mi - cotidiana y rutinaria - tarea de leer los comentarios. Y allí a uno de los compañeros (alumnos) le pidió paciencia para entender las Enumeraciones y que todo quedaría claro en la Programación Genérica. Por curiosidad busque la Programación Genérica en la Lista de Reproducción y es el N° 161 y aún vamos en el 48... Se ve tan lejano. Así de difícil es a estas alturas entender bien lo de las Enumeraciones? Gracias por su respuesta. Y pese a todo aquí sigo.
Creo que con esto ya voy bien para mi práctica de Programación. Son las 4 de la mañana pero voy a tope jeje (me quedan unas horas para entregar)
Por cierto, muchísimas gracias por el curso
Hola cómo estás Juan?. Por ser la primera vez que escribo un comentario. Antes que otra cosa quiero decir muchas gracias por tu tiempo el contenido que compartes esta excelente.😇👌
En cuanto a este tema: tipos numerados; me surgió una inquietud e intenté hacer una mejora y la finalidad era ser capaz de aceptar cualquier de los datos (talla o abreviación) entrada de datos y que nos mostrará el resultado correspondiente en ambos formas.
La principal idea es hacerlo lo más simplificado posible tratando de agregar el menos código posible a lo ya existente.
Saludos, 🤝 desdé México.
Es un tema algo complicado de entender a primera pero bien explicado. Muchas gracias.
Hola Profesor. Antes que nada agradecerte x este curso q me tiene atrapado como nunca nada me atrapo antes. En este video, hay algunas cosas que me confunden un poco. En primer lugar, no termino de entender si Talla es una variable objeto (como indicas en el minuto 04:15), o si es una clase (según entendí en el minuto 06:05) que hereda de Enum. Tampoco me queda claro por que en el minuto 06:05 al usar los métodos y los valores estáticos, y al tener que anteponer a ellos la clase, la clase usada es Talla, mientras que en el minuto 17:34 la clase es Enum. Entiendo que en el minuto 17.34 el método que se quiere usar es estático y pertenece a la clase Enum, pero en el minuto 06:05 cuando ponemos "Talla s=Talla." eclipse no sugiere algunos métodos que pertenecen a la clase u objeto Talla, pero q no vi declarados en ningún lado, como por ejemplo "valueOf(String arg0):Talla. Por ultimo, en el minuto 17:35, declaras una variable "la_talla" q luego, en el minuto 19:54, se comporta como objeto al aplicarle el método Getter dameAbreviatura(); En este caso, tienen las variables de tipo Talla un comportamiento de objeto? Son dudas que no vi planteadas por ningún subscriptor, lo cual me hace sospechar q algo se me escapo durante el curso. Agradezco la respuesta. Saludos!
Enum de hecho es una herramienta bastante útil, yo lo utilice para un analizador léxico que nos pidieron en la universidad.
Despues de ver el video por 2da vez y detenidamente lo entendi todo, que dificil pero se pudo
Me tomo gran parte del dia entenderlo, pero rrepasando mis apuntes, y volviendo a repetir el video , logre entenderlo Gracias
Me alegro !!. Eres muy perseverante. Un saludo!!
Buenas tardes!
Vaya, entonces imagino que posiblemente te llego mis Peticiones de PARTE 3 jeje lo que no me esperaba es que respondieses a las peticiones, bueno ya sabes mi postura respecto a la parte 3 propuesta. Gracias de antemano
Respecto al tema de los tipos Enumerados:
No se porque pero me cuesta entender algunas metodologías que has aplicado en este video
Veamos si puedes aclararme toda esta batería de dudas
Paso a las dudas que no son pocas:
1) Según comentas, los tipos Enum, sirven para almacenar valores que a su vez no se pueden modificar; interpreto que esto no es como un array de tipo String en el cual contenga los valores MINI; MEDIANO,....etc y que se podrian modificar verdad?
2) Cuando haces:
Enum Talla{MINI, MEDIANO, GRANDE, MUY_GRANDE}
Todos los valores en mayúsculas que representan? Son Objetos, son el nombre de constantes y por ende constantes, son variables,...? no lo acabo de ver claro por eso hago la pregunta 3 y porque asocio los tipos Enum como si fuesen arrays y creo que no son lo mismo no?
3) Si realizáramos:
final String[] Talla = {“MINI”, “MEDIANO”, “GRANDE”, “MUY_GRANDE”}
por declarar tallas como un array de String de constantes estos tampoco se pueden modificar, luego no seria el funcionamiento idéntico a los enum? O no seria lo mismo?
4) Si cuando realizas
Enum Talla{MINI, MEDIANO, GRANDE, MUY_GRANDE} los nombres en mayúsculas representan que son constantes y según el video al realizar: Talla s = Talla.MINI; si posteriormente realizáramos un System.out.println(s); este nos devolvería la constante (valor) MINI verdad?
5) En la siguiente parte del video (que es donde casi me das la estocada)
public class Uso_Tallas {
enum Talla {
private String abreviatura;
MINI(“S”), MEDIANO(“M”), GRANDE(“L”), MUY_GRANDE(“XL”)
private Talla(String abreviatura) {
this.abreviatura = abreviatura;
}
}
}
Vuelvo a lo que me esta matando, los valores en mayúsculas que son? Variables, objetos..? si te das cuenta es la misma pregunta qué la 2 y es lo que no me queda claro
6) Según tu el constructor del tipo enum
private Talla(String abreviatura) {
this.abreviatura = abreviatura;
}
recibe un parámetro de tipo String llamado abreviatura que según comentas recibirán los valores S, M, L, y XL; es decir, seria como lo siguiente:
private Talla(“S”) o seria private Talla(MINI(“S”))?
para finalizar lo que tampoco acabo de pillar es cuando dices que por una parte asociamos el nombre del objeto por ejemplo: MINI(“S”) y la abreviatura del objeto? Con quien haces la asociación y en donde?
La asociación se hace en: this.abreviatura = abreviatura;
this.abreviatura representa el nombre del objeto que en este caso seria MINI y al lado de la asignación seria la “s”; es decir seria: MINI = S;
7) Según la instrucción Talla la_talla = Enum.valueOf(Talla.class, entrada_datos); y tu explicación esto nos devolverá el nombre de la Constante enumerada; es decir, si el usuario introduce grande esto nos devolverá GRANDE
Vuelvo a la pregunta de antes los nombres en mayusculas del tipo MINI o MINI(“S”)...etc
que representan, porque parecen que sean CONSTANTES, VARIABLES, o OBJETOS?
Menuda empanada que ahora tengo
PD: Agarraos los machos todos los que sigamos el curso que empiezan las curvas :)
Algo complicado, aunque efectivamente repitiendo el video puede llegar a entenderse...saludos
Gracias. Me ayudaste un montón !!
Definitivamente la clase que mas se me ha complicado, sigo sin entender :(
No entiendo por qué devuelve la abreviatura.
Actualización: Ya entendí !!! ¡Gracias Juan, por este curso! :)
En definitiva es como escribir Talla..dameAbreviatura() Solo que el tipo se lo pasamos por la consola gracias al método de la clase «Scanner»
tipos:
Lo veré una vez más para quedar satisfecho!
gracias tu curso es muy bueno
Como te explico, que soy muy feliz, porque intenté 34 veces, y me salió en la 35 jajajajaja, intenté crear una clase aparte, y le doy uso en la clase "uso_talle". Resulta que no me salia, porque habia puesto "MIN" en lugar de "MINI", y cada vez que ingresaba mini, me daba error :)
Muchas Gracias Juan! saludos
Conceptos algo complejos los de este video. No se explicó tan bien como cuando nos trató de explicar graficamente que un hijo hereda de su padre y este a su vez del abuelo..jajaja. En cualquier caso, enhorabuena por el trabajo que hace, es brillante!
Antonio Zaballos Sánchez Gracias por el comentario. Un saludo
Una pequeña recomendación para quien quiera es que en el minuto 18:40, en vez de usar el valueOf de esa manera que a lo mejor resulta un poco lioso podemos hacer lo siguiente :
Talla la_talla=Talla.valueOf(entrada_datos);
De esta manera lo que estamos haciendo es decirle a nuestro programa directamente que estamos usando la clase Talla sin tener que especificarlo después pasando dos parámetros al método valueOf, no es gran cosa pero alomejor os ayuda a no liaros de porque llama Enum.valueOf() y verlo de manera más sencilla.
Excelente, gracias!
Wooow, esto fue difícil de entender jeje y al leer los comentarios me sentí mejor jajaja porque no fui el único que le costo entenderlo, tuve que devolver el vídeo muchas veces, me acoste a dormir y lo vi al otro dia otra ves jajajajaja, logre aclarar mejor mis dudas cuando quise utilizar la clase JOptionPane solo para practicar un poco ya que me gusta mas que la clase Scanner para obtener el dato de entrada, entonces me daba error y era porque tenia que convertir el string a mayúsculas entonces quise convertirlo aplicando directamente toUpperCase(); directamente a la variable "entrada.toUpperCase();" entonces me seguía dando error, en eso me di cuenta que tenia que crear otra variable donde almacenar la cadena convertida a mayúsculas entonces fue que comprendí por que la necesidad de hacer esto: talla la_talla=Enum.valueOf(talla.class, entrada);
no se si me di a entender espero que si jeje, Saludos desde Venezuela...
Un millón de gracias por este curso !!
Me alegro de que al final saliera. Peleando con el código es como más se aprende. Un saludo!!
Excelente video
Hola profesor!
Que curiosa esta clase "enum", por un lado debes instanciar un objeto Talla del tipo enum, y por otro declarar una variable "s" del tipo Talla.
He leido por ahi que implicitamente lo que uno hace es crear una nueva clase llamada Talla. Esto me ha quedado claro.
Tambien es curiosa la estructura que tiene esta clase, tan diferente a las demas.
Lo que no me quedo claro es que tan necesario es el uso del metodo Enum.valueof ? si lo que guardo en el objeto "la_talla" es lo mismo que ingresé en "entrada_datos" (min 19:39)
Saludos!!
+Juan Jose Camussi Hola !! Sí, tienes razón. A estas alturas del curso plantear el uso de este tipo de clases puede ser un poco desconcertante... Todo se aclarará (eso espero) cuando llegues en el curso a la parte de programación genérica.
El método valueOf devuelve la constante del tipo enum correspondiente. La explicación sería farragosa hacerla por escrito así que te planteo que si después de ver la programación genérica sigues teniendo la duda, me la vuelvas a plantear.
Un saludo
Hola, podrias poner ejercicios, seria un puntazo para el canal.
+Martí Serra Estoy en ello. De momento solo dos para los que empiezan, pero iré subiendo más. En mi web los tenéis www.pildorasinformaticas.com (sección ejercicios) Un saludo
+pildorasinformaticas Gracias! No sabia que tenias una pagina web. Sin duda este es el mejor canal de programacion :)
Este es el video más complejo que he estudiado hasta ahora. Hay un momento en que te pierdes en la explicación, pero creo que es porque no asimilamos con total claridad lo que es un tipo enumerado.. y aún asimilandolo solo entiendo con claridad el ejemplo básico... Donde lo que estamos haciendo es crear un tipo propio de datos.. Algo que nosotros creamos desde 0.. y ese tipo ni es un String, ni un int, ni nada que exista. Es nuestro tipo de datos enum. Pero los ejemplos más elaborados aún me cuesta asimilarlos.
Hola a todos, para los que reclaman ejercicios. Y con el permiso de nuestro profesor.
www3.ntu.edu.sg/home/ehchua/programming/java/J2a_BasicsExercises.html
www3.ntu.edu.sg/home/ehchua/programming/java/J3f_OOPExercises.html
www3.ntu.edu.sg/home/ehchua/programming/java/GraphicsExercises.html
Están en inglés, pero con la ayuda de google translator, no creo que haya problema. En todo caso creo que están bastante claros.
En los ejercicios tenemos "el esqueleto" y se trata de completarlos nosotros. Saludos.
+Antonio J Gracias por el aporte a la comunidad. Un saludo!!
Gracias!!!
:v mejor me marco este vídeo en favoritos y cuando necesite hacer tipos enumerados recurriré a él... es muy difícil de entender D:
Hola profe, mi conslta era con respecto a la declaracion de la clase Talla , esta se crea del siguiente modo:
enum Talla{
}
ahora, cuando llama al metodo valueOf lo hace de la siguiente manera:
Talla latalla = Enum.valueOf(Talla.class, entrada_datos);
la pregnta seria: ¿por que para declarar esta "clase" Talla usa enum con la e en minuscula y para llamar al metodo usa Enum con E en mayusculas?
ESTA DUDA YA FUE RESPONDIDA, MUCHAS GRACIAS!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
AHORA, COMO SERIA PARA STRING???
ya que en c/c++ se usa en minusculas, cual seria la direrencia acá?
desde ya, muchas gracias profesor, excelentes clases.
Una pregunta un poquito personal, he buscado y me han divariado mucho, entonces queria preguntarte.
Realmente tienes que saber matemaicas como precalculo, calculo diferencial e integral para ser un buen programador? O mas bien aplicar como resuelves problemas maticamente en la programacion, que seria mas de logica. Gracias
Cuantas más matemáticas sepas a la hora de programar, mucho mejor. Pero no es necesario tener conocimientos de derivadas, integrales etc. Es más bien lo segundo que comentas tú, es decir, tener una "mente matemática" para resolver problemas. Lo que ocurre es que quien suele tener este tipo de entrenamiento son los que han estudiado más matemáticas. Un saludo!!
Gracias eres un IDOLO.
Buenas.
No conocía esas capacidades de crear method construct dentro de los ENUM, ahora me surgió una duda en el minuto 18:00 donde pasas 2 parámetros al método Enum.valueOf(Talla.class , entrada_datos);
He entendido que le pasas "La CLASS a la que pertenece , nombre_de_var_delScanner " pero no entiendo el porque de usar la sintaxis: " Talla class, ". ¿Porqué se usa el class después del nombre de la Clase.?
Este enum es bastante más complejo que en otros lenguajes jeje, que ventajas tiene usar los construct dentro del ENUM a usarlos como siempre lo hemos realizado en los vídeos.
Gracias a todos los que puedan aportar. Saludos Juan.
Hola juanpamontoyav:
En lugar de:
Talla LaTalla = Enum.valueOf(Talla.class, EntradaDatos);
Podemos usar:
Talla LaTalla = Talla.valueOf(EntradaDatos);
Funciona igual que el anterior, con la diferencia de que se escribe menos:
Gracias
inclusive no hace falta instanciar, simplemente llamar Talla.valueOf(EntradaDatos); en el syso, de alguna manera el método valueof llama al constructor.
Saludos, profesor:
Excelente vídeo, todo fue muy claro para mi cuando empecé a ver a las variables del enum como objetos y no como un String.
Siempre busco entenderlo todo, sin dejar pasar nada y tengo la siguiente duda:
En el método estático valueOf: Enum.valueOf(Talla.class , entrada_datos);
Entiendo que el primer parámetro hace referencia a la clase que pertenece, pero ¿por qué se usa el ".class"? ¿Qué pasaría si se coloca únicamente "Talla"? ¿Qué otro uso tiene este ".class"?
Gracias de antemano, profesor.
Saludos.
si lo escribes así se vuelve más fácil de comprender: Talla.valueof(entrada_datos); no hace falta volver a instanciar Talla la_talla pues el método valueof ya llama al constructor.
Lo cierto es que esto de los enum sería de valor interesante para hacer pseudo IA, al fin y al cabo solo te interesa unos valores concretos ante los que actuar. Luego ya vendría de desarrollar otra parte que traduzca casi infinitos valores a esos pocos.. Todo esto dicho sin tener ni idea de IA, por supuesto!
excelentes videos gracias solo una pregunta en el curso ¿¿¿¿¿se vera recursividad????
+Diegobk Benitez Hola !! Me han preguntado varias veces por el tema de la recursividad. Lo trataré en el curso. No se dónde lo voy a meter pero lo veré. Un saludo
muchas gracias igualmente saludos que este muy bien
Basicamente, valueOf es para poder comparar lo que dice el usuario con nuestro enum, no?
Daniel Ruiz Cayuela Sí, así es. Almacena el tipo enumerado de tipo Talla introducido por el usuario por consola. Un saludo
He sobrevivido hasta aqui.
Primer video que me hace sufrir asi que no queda otra sino mentalizarse, "I shall conquer you".
:)) Lo normal es que Java haga sufrir, como todo lo que merece la pena en esta vida (que profundo me puse)
Entendible el sentimiento.
si no lo mal entendí, según yo esto de los tipos enumerados es como la validación de datos en excel en e que estableces que en las celdas solo se puedan escribir ciertos valores, solo que aquí seria dentro de una variable no?
Hola JUAN, te hago una pregunta en concreto ¿Los tipos enumerados, pueden albergar números? o solamente caracteres de tipo String?
Strings. Pero puedes meter números entre comillas. Un saludo!
yo puse primero sin querer System.out.println(" la abreviatura es "+LaTalla.Abreviatura);
y funciono,pero supongo es porque el metodo main esta en la misma clase, de haber creado otra clase y desde ahi poner esa linea,supongo si me habria dado error de modificador de acceso y tendria que usar LaTalla.getAbreviatura();
+ASURAPRIEST19 Hola !! No recuero de qué hice en este vídeo, pero efectivamente si estuvieras en otra clase y la variable Abreviatura estuviera encapsulada, necesitarías un método de acceso (getter). Un saludo
Lo mismo me pasó, menos mal el complemento de las clases magistrales del profesor( los vídeos) está en los comentarios!!! jaja.
Profe , hará algún curso de Hibernate?
Hola Que tal, antes que nada gracias por este curso que lo vengo siguiendo y me encanta la forma en que lo das.
Una duda, como debería hacer si quiero buscar por abreviatura en el enum en lugar de por la palabra mini, mediano, etc de lo que ingresa el usuario??
Muchas gracias!
Este es el primer vídeo que he tenido que ver 2 veces, debo estar un poco espeso. Con mi edad, 43, me está costando aprender a programar.
El que te habla en los vídeos es de tu quinta. Hay mucha gente joven por aquí a la que le cuesta programar. Aprender un lenguaje de programación desde 0 como Java, es algo que requiere mucho esfuerzo a cualquier edad. Tener que ver un vídeo varias veces, o tener que leer un concepto de programación en un libro varias veces, es algo muy normal. Igual que buscar varias horas un error de sintaxis en el código.
Luego los hay afortunados que con leer y ver una vez es suficiente. Pero estos no son normales. El resto si lo somos. Un saludo!!
pildorasinformaticas Gracias por los ánimos, a veces me atasco pero conseguiré terminar y programar. Luego voy a hacer el de Android, seguramente.
ánimo!
yo tengo 42 y es esfuerzo VAMOS QUE SE PUEDE!!!!
Asu q el primer vídeo, ps para mí es el vídeo 40 masomenos q tengo q verlo por segunda vez jaja
Buenas tardes profe :)
una pequena duda que tengo: la clase enum que utiliza para instanciar Talla es la misma que clase Enum que ocupa para llamar al metodo valueOf().. ?? Por que entonces se escriben diferente ?
Me ha ayudado muchisimo con sus videos!! Muchas gracias.
Florencia T Hola !! Dime por favor minuto y segundo donde aparece tu duda y te digo algo. Un saludo
pildorasinformaticas Min. 4:11 (enum) y Min. 17:45 (Enum)
Ok visto !! Sí, esto es lo de los tipos enumerados. Bueno, pues estamos de nuevo ante una clase "especial" de Java y la verdad es que no hay explicación por la cuál haya que especificar el tipo en minúsculas (enum). Si entramos en la API, la clase Enum comienza en mayúsculas y sin embargo el tipo se especifica en minúsculas.
En la documentación oficial de Java simplemente dicen que lo pongas en minúsculas, así que debe ser por convención. Aquí el enlace de la web de oracle donde lo explican: docs.oracle.com/javase/tutorial/java/javaOO/enum.html
En definitiva es una regla de sintaxis más que no obedece a explicación y que se debe aprender. Quizá lo hicieron para diferenciar de alguna forma los tipos enumerados del resto de tipos "normales" de Java.
Un saludo
Gracias por la respuesta! Me queda mas claro. Saludos :)
Hola, gracias por el contenido. Tengo una duda, en las opciones de talla, la talla muy grande lleva un guion bajo, a la hora de que el usuario introduzca ese valor por consola si no utiliza el guion bajo da un error. Igual que IgnoreCase se utiliza para las mayusculas, Que puedo utilizar para que el guion bajo no sea un problema. Gracias de nuevo.
Hola, Puedo conseguir la abreiatura sin hacer un metodo geter, es decir con la primera forma que usted enseñó? Todos los valores entre llaves?
Sin el método getter funcionaría también, ya que en el main hemos instanciado la_talla, digamos, un objeto que es de tipo enum, con lo cual nos deja acceder a los campos de clase, en este caso a abreviatura. Syso("Abreviatura= " + la_talla.abreviatura).
Claro, pero es un error de POO llamar a una variable sin el getter, ya que no estamos utilizando encapsulamiento
me encanta este curso, tal vez en donde puedo encontrar el curso de POO completo para descargar y revisarlo completamente?
Me alegro de que te guste. En mi página web www.pildorasinformaticas.es estará disponible para descargarlo pronto. Un saludo!!
gracias! espero noticia de cuando ya este disponible, es super util.
:)
Hola profe, como intento siempre desarmar y armar, tratando de ser un tanto a mi manera a la vez me demuestro que he captado su explicacion, pues ...mi propia version..cambiando las posiciones, las Letras, los out.prntln, en fin ..para variar
!!!! muchisimas gracias por su dedicacion, gracias
// version asumida...saludos
import java.util.Scanner;
public class use_Size {
// enum size {
// small, medium, large, X_large
// };
enum Size {
// SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRAL("XL");
S("Small"), M("Medium"), L("Large"), XL("Extra Large");
String abreviature;
public String show_abreviature() {// getter
return abreviature;
}
// private Size(String abreviature12) {
Size(String abreviature1) {
this.abreviature = abreviature1;
}
}
public static void main(String[] args) {
System.out.println("Please enter a Size: S, M, L, XL");
Scanner enter = new Scanner(System.in);
String enter_data = enter.next().toUpperCase();
Size the_size = Enum.valueOf(Size.class, enter_data);
// pricipal objetivo del video : Valores enumerados Ej.. S("Small")...
// de la clase enum Size{
System.out.println("Size: " + the_size + " ,
definition: " + the_size.show_abreviature());
// System.out.println("abreviatura = " + the_size.show_abreviature());
enter.close(); // quizas hace 8 años no era necesario, pero cada vez que se usa scanner se exige :
// ___.close();
}
}
PD. donde he commentado // la linea es para dejar claro que ambas opciones son validas..🔛
Una pregunta dentro de la clase Enum se pueden utilizar otro tipo de datos o solo String, me refiero a la enumeracion. Saludos.
Hola. Que aplicación utilizas para mostrar las flechas y subrayados mientras vas hablando y explicando ?. Muy didácticas las clases. Saludos.
pointofix
Buen día, una pregunta por que razon Eclipse me marca error al insertar esta linea: enum Talla {MINI, MEDIANO}; será por la version del Eclipse o algo por el estilo?. Gracias de antemano por la respuesta y felicidades por este gran curso.
Francisco Tello Hola !! No lo se. Copia y pega aquí todo el código de tu programa y quizás te pueda ayudar. Un saludo
Hola Francisco:
No es por la versión de Eclipse. Es que, según lo que posteaste, has tecleado:
enum Talla {MINI, MEDIANO};
Y en cambio debes poner:
enum Talla {MINI, MEDIANO}
O sea, quita el punto y coma al final.
saludos, me surgió una pregunta hace alguno videos atras, me gustaria saber como se hace para almacenar los datos introducidos en en programa, que incluso despues de cerrarlo yo pueda recuperar esos datos (o mas bien informacion) y poder segir manipulándola, desde ya muchas gracias, excelente curso
Erik Leonel Valdez Hola !! Pues eso lo veremos cuando tratemos el tema de JDBC La solución estaría en almacenarlo en una BBDD o fichero externo. Un saludo
Buenas Juan, tengo una duda simple. Justo en el minuto 3:53, cuando borras el texto, te aparece la barra/cursor de escribir en negro, y luego supongo que presionas alguna tecla para que se te ponga otra vez normal, en el minuto 3:57.
Este cursor/barra de escribir en negro es muy molesta ya que al escribir, si quieres escribir delante de un texto, se sobreescribe este texto.
Supongo que será una pregunta tonta, a veces me ha pasado y debo cerrar la clase y volver a abrirla para quitarlo, con que atajo de teclado se quita?
No se si me he esplicado, pero muchas gracias de antemano, y gracias por los videos claro:)
+Scrypt 99 Esto es porque pulsaste sin querer la tecla "Insert" de tu teclado como me pasó a mi en el vídeo. Con volverla a pulsar es suficiente.
Un saludo
¿Estos tipos enumerados son análogos en cierta medida a los diccionarios de Python? Saludos y gracias.
Disculpa Juan, Esta afirmación se puede decir que está correcta?
ROJO es un objeto de la clase Enum Color. ROJO es un objeto que se almacena una parte de la memoria ram, en la pila de memoria, se puede hacer uso de los valores almacenados en la memoria a través de una dirección de memoria por ejemplo en el espacio 0x08BA, a su vez este objeto puede tener x cantidad de atributos\fields almacenados en ese espacio de memoria.
// ROJO es un objeto que se inicializa con el constructor TelaColor donde se le pasa los atributos color, codigo y tipo, el operador this lo que hace es referencia al espacio de memoria donde está almacenado el objeto ROJO (o el objeto que corresponda) de tipo enum, ejemplo this -> 0x08BA para ROJO, en ese lugar de la memoria a su vez se ubica los atributos color, codigo, tipo)
public enum TelaColor{
ROJO ("Rojo Ferrari", 7, "Importado"),
//invoca al constructor y le pasa los argumentos para ser almacenados en la RAM
AZUL("Azul Claro", 2, "Nacional");
private final String color, tipo;
private final int codigo;
TelaColor (String color, int codigo, String tipo){
this.color=color;
this.codigo=codigo;
this.tipo=tipo;
}
}
Data Memory (RAM) Address
"Rojo" 0x08BA ROJO. color this.color 0x08BA.color
El operador this señala la direccion de memoria donde se
almacena el atributo\field
7 0x08BA ROJO. codigo this.codigo 0x08BA.codigo
this = 0x08BA
"Importado" 0x08BA ROJO.tipo this.tipo 0x08BA.tipo
"Azul Claro" 0x08C0 AZUL. color this.color 0x08C0.color
2 0x08C0 AZUL. codigo this.codigo 0x08C0.codigo
this = 0x08C0
"Nacional" 0x08C0 AZUL.tipo this.tipo 0x08C0.tipo
Si tu creas atributo en otra clase de ese enumerado, qué valor toma por defecto ? Gran video crack, un saludo
Saludos de nuevo, una pregunta, La programacion orientada a objetos, es la misma en todos los lenguajes, static, this, etc es lo mismo en php en c# en js? O tiene algunas diferencias
El concepto sí, la sintaxis es lo que cambia. Una variable static es lo mismo en todos los lenguajes orientados a objetos. Lo mismo con la instrucción this etc. Cambia la forma de utilizarlas (sintaxis). Un saludo!!
gracias por todo, una pregunta porque al inicio se declara enum con minuscula, y en el otro caso esta Enum-->en este esta entendido que es una clase pero porque el otro en minuscula si lo pones igual da error
Hola, primero, muchas gracias por los conocimientos que brindas! segundo, la consulta, cuando abro eclipse aparece este mensaje que no me deja continuar "An error has ocurred. See the log file C:\....JAVA\.metadata\.log." me podrías ayudar a solucionarlo? o indicarme dónde debo buscar? Muchas Gracias!
Se puede implementar clase enum y herencia en un programa?
Hola! qué aplicación usas para hacer las marcas y las flechas en el video?
Muchísimas gracias por el tutorial. Tengo una duda puntual: ¿Por qué la clase enum empieza con minúscula?, no se supone que el nombre de todas las clases en Java deben empezar en mayúscula.
Gracias por el comentario. Los enum no son clases. de hecho nunca los verás con la palabra class delante: class enum.... Esto no existe. Los enum son tipos, unos tipos que puedes crear tú mismo pero no clases. por este motivo no empiezan por mayúsculas. Un saludo!
Las constantes enumeradas se podrian considerar como instancias predefinidas a las que solo el usuario puede acceder pero no modificar ?
Buenos días profe, me surge la siguiente duda, siendo enum una clase, por qué el nombre de esta empieza por una letra minúscula, en todo caso debería llamarse Enum, tal como se muestra en la documentación de las API de Java.
Elvis Espinoza Todo se debe a que la clase Enum es diferente a las demás clases de la API y por eso no sigue las mismas regñas que las demás. Se trata de una clase especial que limita las instancias que se pueden crear de la clase a las específicadas en la implementación de la clase. Además, a diferencia del resto de las clases, en el caso de llevar constructor este debe ser privado para no poder crear más instancias que las especificadas en la implementación de la clase.
Un saludo
Un saludo :)
Osea que es obligatorio declarar enum dentro de la misma clase antes del main?, así como los constructores?,......si yo creo una clase principal y una subclase podria crear el enum en la principal pero los constructores en una subclase?, o no se puede?, lo digo para no pelear con el código en vano :)
Saludos profesor!
Quisiera saber en que momento el contructor hace su trabajo, es decir en que linea de códido del método main hace que
el constructor haga la asignación de la abreviatura?
¿Seria en esta linea de código?
Talla la_talla = Enum.valueOf(Talla.class, entrada_datos);
Tengo la misma duda.
Chabón una consulta, salís del curso haciendo algo medianamente copado, útil?
Cuando vas a hablar del garbage collector?
Nunca. En Java al contrario de otros lenguajes no se manipula. Es automático. Un saludo!!
Buenos días profesor, me ha surgido una duda en el minuto 19:55, y es que no entiendo por qué aún cuando la variable abreviatura declarada dentro del enum se salta la encapsulación aún cuando la declaro como private , me explico, Eclipse no da error al escribir la_talla.abreviatura , lo cual está incorrecto..
Desde ya muchas gracias, su curso me ha servido mucho. Un cordial saludo.
Bastian, lo que pasa es que sigues estando en la misma clase, es decir enum Talla esta dentro de la clase Uso_talla, entonces como se esta llamando en la misma clase, el uso de PRIVATE es aprobado, a menos que enum estuviera en otro archivo ahí si no se podría... saludos.
Flor de Maria Marquez Chavez Muchas gracias por responder, me has despejado la duda :) Saludos y que tengas una buena semana!
De nada, igualmente... buen inicio de semana Bastian.
pildorasinformaticas: Me compre el libro "aprendiendo java 2 en 21 dias", es bueno?( no pude conseguir sus recomendados)Muchas gracias!!!
+aquiles losada Pues la verdad no lo se. No lo he leído nunca. Pero ya te anticipo que el título es mentira a no ser que seas un privilegiado mental. Ya nos contarás qué tal el libro. Un saludo!!
¿Como te fue con el libro? :v
Si en lugar de usar la entrada en línea de comandos, usamos cuadro de diálogo quedaría así, en una sola línea:
String entrada_datos =(JOptionPane.showInputDialog("Escribe una talla: MINI, MEDIANO, GRANDE, MUY_GRANDE")).toUpperCase();
Por supuesto habiendo importado antes:
import javax.swing.*;