Java - Cadena- ayuda

 
Vista:

Cadena- ayuda

Publicado por flor (2 intervenciones) el 21/02/2020 04:12:31
Carlos desea ayudar a mejorar la ortografía de su hijo, por lo que ha pensado en realizar un juego de adivinar palabras. Él sabe que tú tienes nociones para hacer el juego y te ha pedido que lo ayudes. Toma en cuenta que:
Este juego deberá tener tres niveles: fácil, intermedio y avanzado.
El juego se podrá jugar todas las veces que se quiera hasta que el usuario introduzca 0 (cero).
El usuario solo podrá introducir una letra a la vez
Al momento de que el usuario introduzca la letra, el sistema desplegará lo siguiente:

Si la letra concuerda con alguna de la palabra base, se mostrará la letra en el lugar correspondiente (la palabra base es tina), por ejemplo:

Si la letra no corresponde con alguna de las letras de la palabra base, mostrará un mensaje como el siguiente:

Las palabras base estarán fijadas y deben tener los siguientes lineamientos:
Para el nivel fácil debe ser una palabra de cuatro letras.
Para el nivel intermedio debe ser una palabra de ocho letras.
Para el nivel avanzado una palabra de 12 letras.
Recuerda que el juego seguirá hasta que el usuario presione 0, ya sea cuando esté adivinando la palabra o cuanto esté eligiendo el nivel a jugar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-5
Responder
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cadena- ayuda

Publicado por Kabuto (568 intervenciones) el 21/02/2020 21:16:33
Hola flor,
intenta comenzar tú un código y te ayudamos a completarlo.

Las palabras prefijadas puedes declararlas en arrays de String. Haces tres arrays, cada uno para un nivel de dificultad, y les pones unas cuantas palabras con la cantidad de letras que indica el enunciado.

En el código principal muestras un menú y pides una opción para elegir nivel, esto dentro de un bucle que se repita hasta que el usuario introduzca "0"

Cuando haya elegido un nivel, coge una palabra al azar del array que corresponda al nivel de dificultad escogido.

Cuando tengas la palabra, abres un nuevo bucle pidiendo al usuario una letra para ver si está contenida dentro de la palabra.
Esto puedes hacerlo con el método contains() de la clase String, algo parecido a
1
2
3
4
if (palabra.contains(letra))
    //La letra existe dentro de la palabra
else
    //Esa letra no existe en la palabra

Este bucle anidado terminaría cuando el usuario introduzca "0" en lugar de una letra, volviendo entonces al menú principal.


El enunciado no dice nada de que el usuario tenga opción de introducir la palabra completa para ver si la ha acertado.
Tampoco dice que se tenga que mostrar las letras que ha ido acertando a lo largo del juego, más bien parece que solo ha de mostrarse la letra que ha acertado en cada momento.

Puedes ceñirte a lo que dice el enunciado tal cuál para no complicar más el ejercicio.

Intenta hacer un código que siga aproximadamente estos pasos, y cuando te atasques, o algo falle.. pregunta por aquí y te vamos ayudando.

Un saludo.
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: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cadena- ayuda

Publicado por Kabuto (568 intervenciones) el 23/02/2020 12:09:12
Por si sirve de más ayuda, aquí una posible forma de resolverlo:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import java.util.Random;
import java.util.Scanner;
 
public class Advina {
 
	//Palabras fijas para adivinar según nivel
	private static final String[] FACIL = {
			"casa", "bola", "pelo", "vela", "peso", "mono", "mesa", "taco"
	};
 
	private static final String[] INTERMEDIO = {
		"cabalgar", "daiquiri", "ebanista", "fabricar",
		"gabinete", "habanera", "naciente", "obelisco"
	};
 
	private static final String[] AVANZADO = {
			"abnegaciones", "chubasqueros", "deliberacion",	"emocionantes",
			"enloquecedor",	"inmobiliaria",	"instrumentos",	"urbanizacion",
			"traumatizado", "trasnochador"
	};
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		String entrada = "";
 
		while (!entrada.equals("0")) {
			System.out.println("\nElija nivel dificultad...");
			System.out.println("(1) --> Fácil");
			System.out.println("(2) --> Intermedio");
			System.out.println("(3) --> Avanzado");
			System.out.println("(0) --> SALIR");
			System.out.print("Su opción [0-3]: ");
			entrada = teclado.nextLine();
 
			if (!entrada.equals("0")) {
				//Pedimos una palabra en base al nivel de dificultad
				String palabra = obtenerPalabra(entrada);
 
				if (palabra == null) //Si hemos recibido null, es porque la opcion no es válida
					System.out.println("Escoja una opción válida.");
				else {
					String letra = "";
					System.out.print("\nPruebe una letra [0 = SALIR]: ");
					letra = teclado.nextLine().toLowerCase();
					while (!letra.equals("0")) {
						if (palabra.contains(letra)) {
							//Mostramos palabra pero solo enseñando la letra coincidente
							System.out.println("\nEsa letra SI existe en la palabra:");
							for (int i = 0; i < palabra.length(); i++) {
								if (palabra.charAt(i) == letra.charAt(0)) //Es la letra coincidente
									System.out.print(palabra.charAt(i));
								else //No es la letra, tapamos con asterisco
									System.out.print('*');
							}
						}
						else
							System.out.println("Esa letra NO existe en la palabra");
 
						System.out.print("\nPruebe otra letra [0 = SALIR]: ");
						letra = teclado.nextLine();
					}
				}
			}
		}
		System.out.println("\n\nFIN DEL PROGRAMA");
		teclado.close();
 
	}
 
	/**
	 * Proporciona una palabra al azar de uno de los arrays de palabras
	 * prefijadas, según el nivel de dificultad indicado.
	 * @param nivel Valor del nivel de dificultad
	 * @return Palabra al azar o valor null si el valor de nivel no es válido.
	 */
	private static String obtenerPalabra(String nivel) {
		Random azar = new Random();
		switch(nivel) {
		case "1":
			return FACIL[azar.nextInt(FACIL.length)];
		case "2":
			return INTERMEDIO[azar.nextInt(INTERMEDIO.length)];
		case "3":
			return AVANZADO[azar.nextInt(AVANZADO.length)];
		default:
			return null;
 
		}
	}
 
}
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

Cadena- ayuda

Publicado por Nuux (1 intervención) el 23/02/2020 23:12:08
Hola, Muchas gracias por tu colaboracion.

Solo tengo una peticion, podrias hacer que el programa si de la palabra como tal osea... si adivinas "a" que esta ya salga despues

Ejemplo:

****
a

*a*a

c

ca*a

s

casa

y una vez que la palabra se adivine el programa diga "Ganaste" y termine.
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: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cadena- ayuda

Publicado por Kabuto (568 intervenciones) el 24/02/2020 20:24:01
Para ello podemos usar un array de char, con la misma longitud que la palabra "secreta" y que comience lleno de asteriscos.

Conforme se van acertando letras, se cambian los asteriscos en la posición correspondiente por la letra acertada. Y en pantalla mostramos los char de este array, así se verán los asteriscos de letras no encontradas y las letras que sí se han encontrado.
Además, en ese mismo paso podemos comprobar si todavía quedan asteriscos en el array, en cuyo caso, la palabra no ha sido resuelta todavía.
Si ya no quedan asteriscos por descubrir, es que ya se ha acertado la palabra y el juego puede terminar o bien le damos opción al usuario de volver a jugar si quiere.
Podemos ayudarnos con un boolean para controlar si la palabra ha sido resuelta o no, y que forme parte de la condición del bucle while que pide letras.

Por supuesto, recomiendo que primero lo intentéis vosotros. Se aprende mucho más equivocándose y atascándose, que copiando un ejercicio ya resuelto.

Marco en negrita los principales cambios respecto al código anterior
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class Advina {
 
	//Palabras fijas para adivinar según nivel
	private static final String[] FACIL = {
			"casa", "bola", "pelo", "vela", "peso", "mono", "mesa", "taco"
	};
 
	private static final String[] INTERMEDIO = {
		"cabalgar", "daiquiri", "ebanista", "fabricar",
		"gabinete", "habanera", "naciente", "obelisco"
	};
 
	private static final String[] AVANZADO = {
			"abnegaciones", "chubasqueros", "deliberacion",	"emocionantes",
			"enloquecedor",	"inmobiliaria",	"instrumentos",	"urbanizacion",
			"traumatizado", "trasnochador"
	};
 
	//Array de char para representar la palabra secreta a acertar
	private static char[] secreta;
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		String entrada = "";
 
		while (!entrada.equals("0")) {
			System.out.println("\nElija nivel dificultad...");
			System.out.println("(1) --> Fácil");
			System.out.println("(2) --> Intermedio");
			System.out.println("(3) --> Avanzado");
			System.out.println("(0) --> SALIR");
			System.out.print("Su opción [0-3]: ");
			entrada = teclado.nextLine();
 
			if (!entrada.equals("0")) {
				//Pedimos una palabra en base al nivel de dificultad
				String palabra = obtenerPalabra(entrada);
				boolean resuelta = false;  //Aqui controlaremos cuándo se ha resuelto la palabra
				if (palabra == null) //Si hemos recibido null, es porque la opcion no es válida
					System.out.println("Escoja una opción válida.");
				else {
					//Inicializamos array de char con las letras ocultas con *
					secreta = new char[palabra.length()];
					for (int i = 0; i < secreta.length; i++)
						secreta[i] = '*';
					//Pedimos primera letra
					String letra = "";
					System.out.print("\nPruebe una letra [0 = SALIR]: ");
					letra = teclado.nextLine().toLowerCase();
					while (!letra.equals("0") && !resuelta) {
						if (palabra.contains(letra)) {
							System.out.println("\nEsa letra SI existe en la palabra:");
							//La letra existe en la palabra, puede estar en una o más posiciones
							//Las descubrimos cambiando los asteriscos por la letra acertada
							for (int i = 0; i < secreta.length; i++) {
								if (palabra.charAt(i) == letra.charAt(0))
									secreta[i] = letra.charAt(0);
							}
							/*
							 * Hemos sustituido los asteriscos por la letra.
							 * Ahora mostramos los caracteres en pantalla.
							 * Además comprobaremos si quedan asteriscos en el array.
							 * Si ya no quedan asteriscos, es que la palabra ya ha sido resuelta
							 */
							resuelta = true;
							for (int i = 0; i < secreta.length; i++) {
								System.out.print(secreta[i]);
								if (secreta[i] == '*')
									resuelta = false; //Quedan asteriscos, aun no se ha resuelto
							}
						}
						else
							System.out.println("Esa letra NO existe en la palabra");
						if (resuelta)
							System.out.println("\n¡Ganaste! Prueba otra vez si quieres.");
						else {
							System.out.print("\nPruebe otra letra [0 = SALIR]: ");
							letra = teclado.nextLine();
						}
					}
				}
			}
		}
		System.out.println("\n\nFIN DEL PROGRAMA");
		teclado.close();
 
	}
 
	/**
	 * Proporciona una palabra al azar de uno de los arrays de palabras
	 * prefijadas, según el nivel de dificultad indicado.
	 * @param nivel Valor del nivel de dificultad
	 * @return Palabra al azar o valor null si el valor de nivel no es válido.
	 */
	private static String obtenerPalabra(String nivel) {
		Random azar = new Random();
		switch(nivel) {
		case "1":
			return FACIL[azar.nextInt(FACIL.length)];
		case "2":
			return INTERMEDIO[azar.nextInt(INTERMEDIO.length)];
		case "3":
			return AVANZADO[azar.nextInt(AVANZADO.length)];
		default:
			return null;
 
		}
	}
 
}
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