Java - Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

 
Vista:
Imágen de perfil de Marta

Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

Publicado por Marta (13 intervenciones) el 29/10/2022 17:52:38
Estoy intentando hacer un menú en Java donde salgan las opciones A, B, C, D y que al introducir esas letras en consola ya sean mayúsculas o minúsculas el programa sea capaz de identificarlo y que imprima un mensaje para cada opción y que luego el programa finalice. Y si meto otra letra que no sea a, b, c, d (ya sea mayúsculas o minúscula), me vuelva a mostrar el menú.

Soy capaz de crear el menú, pero no se si voy bien encaminada. Con while y switch case solo me permite elegir opciones si le meto números, por lo cual, no se como hacerlo con letras que no discrimine entre mayúsculas y minúsculas.

El menú es algo así:

MENÚ
----------

A - Como me llamo? ---------> al pulsar A o a, me muestre Me llamo Laura, y luego pulsando una tecla finalice.
B - Cual es mi apellido?
C- Cuantos años tengo?
D- Salir -----------------> me muestre un mensaje de despedida que habrá que confirmar con una tecla y finalice.

Introduce una opción:

Cómo lo haríais vosotros? Lo mismo estoy pensando en el switch y while y a lo mejor tendría que hacerlo de alguna otra forma?

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

Publicado por Kabuto (1381 intervenciones) el 29/10/2022 22:56:41
Hola Marta

Sí vas bien con while y switch.

Puedes leer letras (tipo char) con el método nextLine().charAt(0) de la clase Scanner.

Luego, para que el menú funcione tanto si se escribe en mayúscula o minúscula, tienes dos opciones.

Una, hacer un switch que contemple todas las letras:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class PruebaSwitch {
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
 
		boolean continuar = true;
 
		while (continuar) {
			System.out.println("\n\t\tMENU");
			System.out.println("\t\t----\n");
			System.out.println("(A) - Como me llamo?");
			System.out.println("(B) - Cual es mi apellido?");
			System.out.println("(C) - Cuantos años tengo?");
			System.out.println("(D) - SALIR");
			System.out.print("Opcion: ");
			char opcion = teclado.nextLine().charAt(0);
 
			switch (opcion) {
			case 'a':
			case 'A':
				System.out.println("\nMe llamo Laura");
				continuar = false;
				break;
			case 'b':
			case 'B':
				System.out.println("\nMe apellido Sanchez");
				continuar = false;
				break;
			case 'c':
			case 'C':
				System.out.println("\nTengo 22 años");
				continuar = false;
				break;
			case 'd':
			case 'D':
				System.out.println("\nSaliendo del MENÚ");
				continuar = false;
				break;
			default:
				System.out.println("\nOpción equivocada");
				System.out.println("\t\tPulse <INTRO> para continuar");
				teclado.nextLine();
			}
		}
 
		System.out.println("\t\tPulse <INTRO> para TERMINAR");
		teclado.nextLine();
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
 
	}
 
}


La otra opción, un poco más elegante porque ahorras algunas líneas de código, es transformar lo que introduzca el usuario a mayúsculas (o minúsculas, como prefieras) y así ya luego el switch solo tiene que tener en cuenta letras mayúsculas(o solo minúsculas) porque estamos asegurando de que eso es lo que va a recibir.

Esa "transformación" la podemos hacer intercalando el método toUpperCase() antes de extraer el char:
nextLine().toUpperCase().charAt(0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class PruebaSwitch {
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
 
		boolean continuar = true;
 
		while (continuar) {
			System.out.println("\n\t\tMENU");
			System.out.println("\t\t----\n");
			System.out.println("(A) - Como me llamo?");
			System.out.println("(B) - Cual es mi apellido?");
			System.out.println("(C) - Cuantos años tengo?");
			System.out.println("(D) - SALIR");
			System.out.print("Opcion: ");
			char opcion = teclado.nextLine().toUpperCase().charAt(0);
 
			switch (opcion) {
			case 'A':
				System.out.println("\nMe llamo Laura");
				continuar = false;
				break;
			case 'B':
				System.out.println("\nMe apellido Sanchez");
				continuar = false;
				break;
			case 'C':
				System.out.println("\nTengo 22 años");
				continuar = false;
				break;
			case 'D':
				System.out.println("\nSaliendo del MENÚ");
				continuar = false;
				break;
			default:
				System.out.println("\nOpción equivocada");
				System.out.println("\t\tPulse <INTRO> para continuar");
				teclado.nextLine();
			}
		}
 
		System.out.println("\t\tPulse <INTRO> para TERMINAR");
		teclado.nextLine();
		System.out.println("\n\t\tFIN DE PROGRAMA");
		teclado.close();
 
	}
 
}


Espero que haya quedada clara la explicación.
Pregunta lo que necesitas.

Un saludo Marta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marta

Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

Publicado por Marta (13 intervenciones) el 30/10/2022 01:23:30
Muchas gracias por la aclaración!!!!

Ahora si me funciona tal y como estaba planteado. No iba mal encaminada y tenía una estructura muy similar, pero me faltaba lo del método nextLine().charAt(0) o el nextLine().toUpperCase().charAt(0), que no lo conocía aún. Me lo apunto para futuros problemas!!! ^ ^

Poco a poco voy ampliando conocimientos en JAVA, pero de estar pedida ya voy avanzando poco a poco y con una buena comunidad mucho mejor. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

Publicado por Kabuto (1381 intervenciones) el 30/10/2022 12:11:42
No se si es necesario, porque ya percibo que eres bastante espabilada ;) , pero quisiera explicar mejor cómo funciona esta línea.
1
char opcion = teclado.nextLine().toUpperCase().charAt(0);

En realidad esa línea NO es un único método.
Es una concatenación de tres métodos, y NO todos son de la misma clase.

El proceso que está realizando, se puede ver mejor si lo hacemos en varías líneas.

Tenemos un objeto llamado "teclado" que es de clase Scanner.
Esta clase tiene varios métodos para obtener datos de una fuente, en este caso, del teclado.(también sirve para otras fuentes, como un fichero de texto por ejemplo)

Nosotros vamos a llamar a su método nextLine(), que recoge una "línea de texto" completa(ya sea una letra o un texto largo) por el teclado y nos la devuelve como un objeto de clase String
1
String linea = teclado.nextLine();

El objeto Scanner ya ha terminado su labor, ahora estamos con un objeto de clase String.
Y como queremos que todo lo introducido sea mayúsculas, la clase String tiene un método que al invocarlo sobre el objeto llamado "linea", retorna un nuevo String con el mismo texto, pero en mayúsculas
1
String todoMayus = linea.toUpperCase();

O si quisiéramos minúsculas:
1
String todoMinus = linea.toLowerCase();

Bien, tras esto seguimos teniendo un String. Pero nosotros en realidad queremos un char, un carácter.
La clase Scanner no tiene un método específico para leer un char. Así que lo que hacemos es leer un String y a partir de él obtener un char.
Para ello, la clase String tiene otro método llamado charAt(int posicion), donde en el argumento entre paréntesis le tenemos que indicar de qué posición de la cadena String donde lo estamos invocando, ha de extraer un char

La primera posición es 0, así que esa es la posición que le indicamos en este caso.
Esto significa que da igual si la cadena introducida por teclado es solo "A", o es una cadena larga como "ABCDEFGH". En ambos casos vamos a obtener el char 'A' , porque es el que se encuentra en la posición 0.
1
char opcion = todoMayus.charAt(0);

Entonces, el proceso paso a paso por el cuál conseguimos un char en mayúsculas a partir de un objeto Scanner, es este:

1
2
3
String linea = teclado.nextLine(); //Leemos línea
String todoMayus = linea.toUpperCase(); //Transformamos a mayúsculas
char opcion = todoMayus.charAt(0); //Obtenemos un char

Y gracias a que Java, como otros lenguajes, permite concatenar métodos, todo este proceso lo podemos resumir en una sola línea:
1
char opcion = teclado.nextLine().toUpperCase().charAt(0);


Todo esto en realidad es muy sencillo y lógico, pero igualmente puede requerir explicación.
Porque no es lo mismo saber "qué hace" una línea de código, que saber "cómo lo hace".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marta

Cómo crear en JAVA un menú simple con opciones A, B, C, D y que identifique mayúsculas y minúsculas?

Publicado por Marta (13 intervenciones) el 30/10/2022 12:35:34
Muchas gracias! Creo que más o menos entiendo la explicación que me has dado. Intuía que había una concatenación pero realmente no entendía como funcionaba. Ahora lo tengo más claro y acabo de aprender algo nuevo que no me han enseñado en clase. La voy a guardar para futuros ejercicios :)

Por ahora en este ejercicio que estaba haciendo lo he hecho Con nextLine().charAt(0) y creando cases a y A para que me reconozca las entradas en teclado, que me es más fácil de entender. En un próximo probaré lo anterior.

La programación es muy amplia, son muchas cosas que asimilar y practicar. Pero por ahora voy aguantando el curso como una leona y con dolor de cabeza :S

En la próxima práctica para varias semanas ahora tengo que crear nuestra propia clase que pueda utilizar como caja de herramientas. Empezando con el temario estoy porque los tiempos son un no parar!

Thank por la ayuda de verdad!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar