Foros del Web » Programación para mayores de 30 ;) » Java »

Las vocales con asteriscos pidiendo letra (Java principiante)

Estas en el tema de Las vocales con asteriscos pidiendo letra (Java principiante) en el foro de Java en Foros del Web. Buenas! En el módulo de programación de DAW nos han pedido a parte de otros ejercicios el poner las vocales con asteriscos en un print, ...
  #1 (permalink)  
Antiguo 09/11/2019, 19:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Las vocales con asteriscos pidiendo letra (Java principiante)

Buenas!

En el módulo de programación de DAW nos han pedido a parte de otros ejercicios el poner las vocales con asteriscos en un print, lo cual es bastante sencillo ya que había que hacerlo en plan:

System.out.println("****");
System.out.println("* ");
System.out.println("****");
System.out.println("* ");
System.out.println("****");

Pero yo de primeras no quería hacerlo así, quería hacerlo de manera que al usuario se le pida que meta una vocal en el teclado y entonces la transforma al asterisco, al final lo he mandado como todos pero me he quedado con las ganas de saber cómo se haría pidiendo una vocal, ya que hasta ahora sólo nos han pedido "scannear" números para luego jugar con ellos (n > 0) etc etc.

Tengo esto de código pero me daba errores en consola (de momento nos prohíben usar IDE):

Código Java:
Ver original
  1. import java.util.Scanner;
  2.  
  3.  
  4. public class PROG02_Ejer05 {
  5.     public static void main(String[] args){
  6.         Scanner teclado = new Scanner( System.in );
  7.        
  8.         boolean comprobar = true;
  9.         char n;
  10.        
  11.         while (comprobar == true) {
  12.             System.out.println("ingrese una vocal mayúscula: ");
  13.             n = teclado.next().charAt(0);
  14.            
  15.             if (n == A) {
  16.                 System.out.println("****");
  17.                 System.out.println("*  *");
  18.                 System.out.println("****");
  19.                 System.out.println("*  *");
  20.                 System.out.println("*  *");
  21.                         }
  22.         }
  23.     }
  24. }

El if n = A está mal ya que entiende A como variable y no sé como ponerle un = a la letra que se ha escaneado, que el usuario ha introducido.

Luego pondría un else de que si no son las anteriores A,E,I,O o U, ponga "No has introducido una vocal inténtalo de nuevo". Eso lo sé hacer sin problemas.

El boolean comprobar = true lo pongo al principio como "activador" y al final de todos los condicionales pongo el false para que el programa se acabe pero si el programa cae en el "else" volvería a pedir la letra, en vez de finalizar el programa.

¿No es muy difícil no? Me quería marcar un ejercicio más completo pero no me ha dado tiempo pero igualmente quiero aprender a hacerlo!!
  #2 (permalink)  
Antiguo 09/11/2019, 21:26
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Hola, los chars en Java van entre comillas simples:

Código Java:
Ver original
  1. if(n == 'A'){
  2.  
  3. }

Las cadenas de texto o strings, en cambio, van con comillas dobles. Ej. String palabra = "hola";

El resto de vocales lo dices bien, se haría con else if.

Última edición por prueba230683; 09/11/2019 a las 21:33
  #3 (permalink)  
Antiguo 10/11/2019, 08:19
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Cita:
Iniciado por prueba230683 Ver Mensaje
Hola, los chars en Java van entre comillas simples:

Código Java:
Ver original
  1. if(n == 'A'){
  2.  
  3. }

Las cadenas de texto o strings, en cambio, van con comillas dobles. Ej. String palabra = "hola";

El resto de vocales lo dices bien, se haría con else if.
Hola prueba, gracias! Pensaba que iba algo más desencaminado. Funciona bien pero he querido cambiar que si metes una vocal, tanto mayúscula como minúscula funcione, ya que sólo funcionaba con una de las dos (la que pusieras en el paréntesis) pues java las diferencia. Pensaba que con el operador "o" (||) valdría pero me da error en consola. He puesto el código así:

Código Java:
Ver original
  1. if (n == 'A' || 'a') {

error: bad operand types for binary operator '||'
if (n == 'A' || 'a') {
^
first type: boolean
second type: char
Y me da error en el "||".
  #4 (permalink)  
Antiguo 10/11/2019, 08:20
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

La forma correcta es:

Código Java:
Ver original
  1. if (n == 'A' || n == 'a') {
  2.  
  3. }
  #5 (permalink)  
Antiguo 10/11/2019, 10:00
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Perfecto, así me ha quedado el código por si alguien quisiera verlo:

Código Java:
Ver original
  1. import java.util.Scanner;
  2.  
  3.  
  4. public class PROG02_Ejer05_complejo {
  5.     public static void main(String[] args){
  6.         Scanner teclado = new Scanner( System.in );
  7.        
  8.         char n;
  9.        
  10.        
  11.             System.out.println("ingrese una vocal");
  12.             n = teclado.next().charAt(0);
  13.            
  14.            
  15.             if (n == 'A' || n == 'a') {
  16.                 System.out.println("****");
  17.                 System.out.println("*  *");
  18.                 System.out.println("****");
  19.                 System.out.println("*  *");
  20.                 System.out.println("*  *");
  21.                         }
  22.            
  23.             else if (n == 'E' || n == 'e') {
  24.                 System.out.println("****");
  25.                 System.out.println("*   ");
  26.                 System.out.println("****");
  27.                 System.out.println("*   ");
  28.                 System.out.println("****");
  29.                         }
  30.             else if (n == 'I' || n == 'i') {
  31.                 System.out.println("****");
  32.                 System.out.println(" ** ");
  33.                 System.out.println(" ** ");
  34.                 System.out.println(" ** ");
  35.                 System.out.println("****");
  36.                         }
  37.                        
  38.             else if (n == 'O' || n == 'o') {
  39.                 System.out.println("****");
  40.                 System.out.println("*  *");
  41.                 System.out.println("*  *");
  42.                 System.out.println("*  *");
  43.                 System.out.println("****");
  44.                         }  
  45.  
  46.             else if (n == 'U' || n == 'u') {
  47.                 System.out.println("*  *");
  48.                 System.out.println("*  *");
  49.                 System.out.println("*  *");
  50.                 System.out.println("*  *");
  51.                 System.out.println("****");
  52.                         }
  53.                        
  54.                        
  55.             else {
  56.                 System.out.println("Has ingresado un carácter inválido, por favor, inténtalo de nuevo.");
  57.                 }
  58.        
  59.     }
  60. }

Lo que no he sabido hacer es hacer que no se acabe el programa en el else, para decir que ha sido un caracter inválido, inténtelo de nuevo y que deje meter otra vocal, pero que no se acabe el programa. (pensaba que sabía con el boolean comprobar = true; poniendo while luego).

Incluso cuando meto una vocal bien, que vuelva a poner introduzca una vocal, y no se acabe el programa.
  #6 (permalink)  
Antiguo 10/11/2019, 11:16
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Puedes decirle al usuario que escriba "c" si quiere continuar, u otro caracter en caso de que quiera salir del programa:

Código Java:
Ver original
  1. import java.util.Scanner;
  2.  
  3.  
  4. public class PROG02_Ejer05_complejo {
  5.     public static void main(String[] args){
  6.         Scanner teclado = new Scanner( System.in );
  7.        
  8.         char n;
  9.        
  10.         char continuar = 'c';
  11.        
  12.         while(continuar == 'c'){
  13.             System.out.println("ingrese una vocal");
  14.             n = teclado.next().charAt(0);
  15.            
  16.             if (n == 'A' || n == 'a') {
  17.                 System.out.println("****");
  18.                 System.out.println("*  *");
  19.                 System.out.println("****");
  20.                 System.out.println("*  *");
  21.                 System.out.println("*  *");
  22.             }else if (n == 'E' || n == 'e') {
  23.                 System.out.println("****");
  24.                 System.out.println("*   ");
  25.                 System.out.println("****");
  26.                 System.out.println("*   ");
  27.                 System.out.println("****");
  28.             }else if (n == 'I' || n == 'i') {
  29.                 System.out.println("****");
  30.                 System.out.println(" ** ");
  31.                 System.out.println(" ** ");
  32.                 System.out.println(" ** ");
  33.                 System.out.println("****");
  34.             }else if (n == 'O' || n == 'o') {
  35.                 System.out.println("****");
  36.                 System.out.println("*  *");
  37.                 System.out.println("*  *");
  38.                 System.out.println("*  *");
  39.                 System.out.println("****");
  40.             }else if (n == 'U' || n == 'u') {
  41.                 System.out.println("*  *");
  42.                 System.out.println("*  *");
  43.                 System.out.println("*  *");
  44.                 System.out.println("*  *");
  45.                 System.out.println("****");
  46.             }else {
  47.                 System.out.println("Has ingresado un carácter inválido.");
  48.             }  
  49.                
  50.             System.out.println("Introduce c para continuar o introduce otra letra para salir.");
  51.             continuar = teclado.next().charAt(0);
  52.         }
  53.         System.out.println("Programa finalizado.");
  54.     }
  55. }
  #7 (permalink)  
Antiguo 26/11/2019, 09:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Buenas @prueba230683 ; Perdona que desvirtúe un poco el hilo, por lo menos del título al que respecta. A ver si entre todos me podéis echar una mano. Me piden este Ejercicio en el grado que estoy cursando, el cual entregué la semana pasada y me han corregido hoy. Me lo han puntuado de 0/5... y me gustaría saber si está mal ya que me han mandado a la recuperación de Junio directo. A ver si entre todos me podéis echar una mano ya que estoy algo nervioso... Gracias.

Código Java:
Ver original
  1. public class Cafetera {
  2.     private int _capacidadMaxima;
  3.     private int _cantidadActual;
  4.  
  5.     /** Constructores **/
  6.     public Cafetera(int capacidadMaxima, int cantidadActual) {
  7.         _cantidadActual = cantidadActual;
  8.         _capacidadMaxima = Math.max(capacidadMaxima, cantidadActual);
  9.     }
  10.  
  11.     public Cafetera(int capacidadMaxima) {
  12.         this(capacidadMaxima, 0);
  13.     }
  14.  
  15.     public Cafetera() {
  16.         this(1000, 0);
  17.     }
  18.  
  19.     /** Accesores **/
  20.     public int get_capacidadMaxima() {
  21.         return _capacidadMaxima;
  22.     }
  23.  
  24.     public void set_capacidadMaxima(int _capacidadMaxima) {
  25.         this._capacidadMaxima = _capacidadMaxima;
  26.     }
  27.  
  28.     public int get_cantidadActual() {
  29.         return _cantidadActual;
  30.     }
  31.  
  32.     public void set_cantidadActual(int _cantidadActual) {
  33.         this._cantidadActual = _cantidadActual;
  34.     }
  35.  
  36.     /** Metodos **/
  37.     public void llenarCafetera() {
  38.         _cantidadActual = _capacidadMaxima;
  39.     }
  40.  
  41.     public void servirTaza(int tamanoTaza) {
  42.         _cantidadActual -= Math.min(tamanoTaza, _cantidadActual);
  43.     }
  44.  
  45.     public void vaciarCafetera() {
  46.         _cantidadActual = 0;
  47.     }
  48.  
  49.     // Agrega la cantidad de cafe indicada
  50.     // Si se intenta agregar mas que la capacidad maxima solamente se agrega hasta el maximo
  51.     public void agregarCafe(int cantidad) {
  52.         _cantidadActual = Math.min(_capacidadMaxima, _cantidadActual + cantidad);
  53.     }
  54. }



El fallo, según el profesor es que no he comprobado el funcionamiento del código, pero el mismo compila sin problemas. No he puesto prints por lo tanto no hay nada que correr en consola, y todavía no nos dejan usar software para ayudarnos.
  #8 (permalink)  
Antiguo 26/11/2019, 17:01
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

En la frase:

Cita:
"Si la cantidad actual es mayor que la capacidad máxima de la cafetera, la ajustará al máximo"
Creo que se refiere a que si el constructor Cafetera recibe un cantidadActual que es mayor que capacidadMaxima, entonces debes rebajar cantidadActual a capacidadMaxima, ya que superar la capacidad máxima de una cafetera no tiene sentido.

Por tanto sería:

Código Java:
Ver original
  1. public Cafetera(int capacidadMaxima, int cantidadActual) {
  2.    _cantidadActual = Math.min(cantidadActual, capacidadMaxima);
  3.    _capacidadMaxima = capacidadMaxima;
  4. }

Por otra parte:

Código Java:
Ver original
  1. public Cafetera(int capacidadMaxima) {
  2.        this(capacidadMaxima, 0);
  3. }

debería ser:

Código Java:
Ver original
  1. public Cafetera(int capacidadMaxima) {
  2.        this(capacidadMaxima, capacidadMaxima);
  3. }

Ya que te dice que también inicialices la cantidadActual a la capacidadMaxima especificada.

Por otra parte, a la hora de servir la taza debes evitar que _cantidadActual se quede en número negativo, es decir, que tomes más de lo que tiene actualmente la cafetera:

Código Java:
Ver original
  1. public void servirTaza(int tamanoTaza) {
  2.         _cantidadActual = Math.max(0, _cantidadActual - tamanoTaza);
  3. }

Puede que me haya equivocado en algo o tengas más errores, lo he hecho deprisa. De todas formas haz pruebas con los casos que te den para que puedas comprobar si está funcionando correctamente. Y usa printf para mostrar los resultados obtenidos. No podemos hacer todo el trabajo por ti.
  #9 (permalink)  
Antiguo 26/11/2019, 17:21
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

No creo que hagáis todo el trabajo, sólo comenté un par de dudas en el ejercicio anterior. Este lo hice por mi cuenta al igual que el resto. Mi pregunta aquí era si de verdad este ejercicio está tan mal como para mandarnos a Junio directo... Pero bueno, veo que bien tampoco está.
  #10 (permalink)  
Antiguo 26/11/2019, 18:19
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Realmente son 3 errores contados los que tienes, que se hubieran solucionado si hubieras testeado los resultados antes de realizar la entrega al profesor. De ahí lo de que "no podemos hacer tu trabajo".

El profesor asume que antes de entregar una práctica has comprobado los resultados. Yo también he realizado prácticas y suelen suspender si el programa no funciona, precisamente porque asumen que ya has comprobado que funciona.

Se nota que has entendido bien los conceptos de Java orientado a objetos, de hecho has utilizado this para invocar a otros constructores reutilizando parte del código, lo cual no es algo para nada básico y yo solo por eso te hubiera aprobado.

Simplemente comprueba los resultados para la siguiente vez.

Un saludo.
  #11 (permalink)  
Antiguo 26/11/2019, 18:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Gracias @prueba230683.

El tema es que sin println yo pensaba que no se podían comprobar... total que lo compilé sin errores y al ejecutarlo me daba un error (no recuerdo cual) pero pensé que era porque no había nada que sacar en consola, al no haber prints. Desconozco que es lo que hubiera salido en consola de hacerlo correctamente.

Saludos y gracias.
  #12 (permalink)  
Antiguo 26/11/2019, 18:46
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Las vocales con asteriscos pidiendo letra (Java principiante)

Java tiene dos tipos de errores: los errores en tiempo de compilación y los errores en tiempo de ejecución (es decir, cuando el código compila bien pero al ejecutarse se produce un error).

Una vez consigues arreglar esos errores, el objetivo es comprobar que tu programa produce resultados coherentes y para ello puedes usar println (aunque aprenderéis a usar depurador más adelante).

Etiquetas: letra
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.