Java - Ejercicio Adivina Quien

 
Vista:
sin imagen de perfil

Ejercicio Adivina Quien

Publicado por Steven (1 intervención) el 06/04/2022 03:25:23
Screen-Shot-2022-04-05-at-7.21.16-PM

Hola chicos, tengo que realizar este programa de adivinar esos personajes, pero la verdad no tengo idea como, alguno que me pudiera ayudar que me pueda explicar?

gracias
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

Ejercicio Adivina Quien

Publicado por Kabuto (1381 intervenciones) el 06/04/2022 12:09:53
No pienses ahora en escribir código, eso después.
Primero piensa en la lógica que conviene aplicar.

Tienes que analizar esos personajes y decidir que preguntas son las ideales para distinguir unos de otros.

Por ejemplo, preguntar si es hombre o mujer, es una pésima pregunta. Porque todos los personajes son hombres, así que esa pregunta no aporta nada.

En cambio, preguntar si es un personaje ficticio o real, puede ser una buena pregunta.
Porque esto ya nos permite distinguir entre dos grupos importantes:

Ficticios
1
2
3
4
5
-Goku
-Darth Vader
-Bruce Wayne
-Tin Tin
-Ayudante de Santa

Reales
1
2
3
4
5
6
7
8
-Radamel Falcao
-Michael Jordan
-Eminem
-Adam Sandler
-Joe Biden
-Jose Saramago
-Günter Grass
-Kim Jong Un

Y además, según el grupo, ahora podemos hacer preguntas más específicas

Por ejemplo, si es Ficticio, ahora podemos preguntar si ha nacido en el planeta Tierra o no.

Terrestre
1
2
3
-Bruce Wayne
-Tin Tin
-Ayudante de Santa

Extraterrestre
1
2
-Goku
-Darth Vader

Fíjate, ya tenemos dos grupos muy reducidos. De hecho, para los Extraterrestres nos basta con una tercera pregunta más para encontrar el personaje.
¿Cuál puede ser la pregunta ideal para los Extraterrestres?

Podríamos preguntar si es bueno o malo. Pero, siendo puntillosos, el personaje de Darth Vader su bondad/maldad puede ser dudosa. Su papel en Star Wars era de "malo", pero si conocemos su historia, en realidad era una persona bondadosa que fue corrompido por el "lado oscuro" aunque finalmente se redimió...así que puede haber gente que no esté de acuerdo en considerar "malo" a Darth Vader.

Quizás mejor buscar una pregunta que no esté abierta a interpretaciones personales. Por ejemplo, podemos preguntar si cuando nació tenía una cola de mono

Cola de Mono
1
-Goku

Sin cola
1
-Darth Vader


Por este camino, con tres preguntas ya tendríamos el personaje detectado.

Pues esto es lo primero que tienes que pensar, en cuáles son las preguntas adecuadas para ir separando los personajes en grupos más pequeños.
En programación no solo hay que aprender a escribir código, lo importante es aprender a pensar.

Te recomiendo que hagas un diagrama de flujo, con lápiz y papel o como quieras hacerlo, para organizar mejor las preguntas y grupos que generan.

imagen_2022-04-06_120811


Luego, cuando ya tengas claro, las preguntas ideales, solo entonces habrá que ponerse a pensar en como trasladar eso a un código.

Por cierto, ¿puedes usar clases POO o aún estás haciendo programación estructurada?
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

Ejercicio Adivina Quien

Publicado por Kabuto (1381 intervenciones) el 07/04/2022 12:14:11
A ver.
Este podría ser el diagrama de flujo. Con esta selección de preguntas, solo necesitaremos un máximo de cuatro preguntas para determinar el personaje:

imagen_2022-04-07_120800


Teniendo este diagrama, que ayuda mucho a clarificar nuestras ideas, podemos hacer un código donde haremos esas preguntas de si o no, y según la respuesta, escogeremos la siguiente pregunta.
Se puede hacer anidando unos cuantos if else

Para reducir código y lograr que tantos if else anidados sean legibles, podemos hacer un método boolean que se ocupe de mostrar la pregunta que corresponde en cada caso y retornar true si se ha respondido "sí" o false en caso contrario.

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
import java.util.Scanner;
 
public class Acertar {
 
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		System.out.println("Elija un PERSONAJE y responda a las PREGUNTAS:");
		System.out.println("\t-Radamel Falcao");
		System.out.println("\t-Goku");
		System.out.println("\t-Michael Jordan");
		System.out.println("\t-Eminem");
		System.out.println("\t-Darth Vader");
		System.out.println("\t-Adam Sandler");
		System.out.println("\t-Bruce Wayne");
		System.out.println("\t-Tin tin");
		System.out.println("\t-Ayudante de Santa");
		System.out.println("\t-Joe Biden");
		System.out.println("\t-Jose Saramago");
		System.out.println("\t-Günter Grass");
		System.out.println("\t-Kim Jong Un");
 
 
		if (preguntar("\nPREGUNTA: ¿Es un personaje FICTICIO?")) {
			if (preguntar("\nPREGUNTA: ¿Es un EXTRATERRESTRE")) {
				if (preguntar("\nPREGUNTA: ¿Nacio con COLA DE MONO?"))
					System.out.println("\n\t\tEs GOKU");
				else
					System.out.println("\n\t\tEs DARTH VADER");
			}
			else {//No extraterrestre
				if (preguntar("\nPREGUNTA: ¿Es FRANCES?")) {
					System.out.println("\n\t\tEs TIN TIN");
				}
				else {//No frances
					if (preguntar("\nPREGUNTA: ¿Es un SUPERHEROE"))
						System.out.println("\n\t\tEs BRUCE WAYNE");
					else
						System.out.println("\n\t\tEs AYUDANTE DE SANTA");
				}
			}
		}
		else {//No ficticio
			if (preguntar("\nPREGUNTA: ¿Es ESTADOUNIDENSE?")) {
				if (preguntar("\nPREGUNTA: ¿Es ARTISTA")) {
					if (preguntar("\nPREGUNTA: ¿Es CANTANTE?"))
						System.out.println("\n\t\tEs EMINEM");
					else
						System.out.println("\n\t\tEs ADAM SANDLER");
				}
				else {//No artista
					if (preguntar("\nPREGUNTA: ¿Es POLITICO?"))
						System.out.println("\n\t\tEs JOE BIDEN");
					else
						System.out.println("\n\t\tEs MICHAEL JORDAN");
				}
			}
			else {//No estadounidense
				if (preguntar("\nPREGUNTA: ¿Es ESCRITOR?")) {
					if (preguntar("\nPREGUNTA: ¿Es PORTUGUES?"))
						System.out.println("\n\t\tEs JOSE SARAMAGO");
					else
						System.out.println("\n\t\tEs GÜNTER GRASS");
				}
				else {//No escritor
					if (preguntar("\nPREGUNTA: ¿Es FUTBOLISTA"))
						System.out.println("\n\t\tEs RADAMEL FALCAO");
					else
						System.out.println("\n\t\tEs KIM JONG UN");
				}
			}
		}
 
	}
 
	private static boolean preguntar(String texto) {
		System.out.println(texto);
		return teclado.nextLine().equalsIgnoreCase("si");
	}
 
}

Si lo probamos, veremos que con cuatro preguntas, tres según el personaje, son suficientes para determinar el personaje

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
Elija un PERSONAJE y responda a las PREGUNTAS:
	-Radamel Falcao
	-Goku
	-Michael Jordan
	-Eminem
	-Darth Vader
	-Adam Sandler
	-Bruce Wayne
	-Tin tin
	-Ayudante de Santa
	-Joe Biden
	-Jose Saramago
	-Günter Grass
	-Kim Jong Un
 
PREGUNTA: ¿Es un personaje FICTICIO?
si
 
PREGUNTA: ¿Es un EXTRATERRESTRE
no
 
PREGUNTA: ¿Es FRANCES?
no
 
PREGUNTA: ¿Es un SUPERHEROE
si
 
		Es BRUCE WAYNE

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
Elija un PERSONAJE y responda a las PREGUNTAS:
	-Radamel Falcao
	-Goku
	-Michael Jordan
	-Eminem
	-Darth Vader
	-Adam Sandler
	-Bruce Wayne
	-Tin tin
	-Ayudante de Santa
	-Joe Biden
	-Jose Saramago
	-Günter Grass
	-Kim Jong Un
 
PREGUNTA: ¿Es un personaje FICTICIO?
no
 
PREGUNTA: ¿Es ESTADOUNIDENSE?
no
 
PREGUNTA: ¿Es ESCRITOR?
si
 
PREGUNTA: ¿Es PORTUGUES?
si
 
		Es JOSE SARAMAGO
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
sin imagen de perfil

Ejercicio Adivina Quien

Publicado por Lizarry (4 intervenciones) el 26/04/2022 16:39:54
Parece que comprendes el tema realmente bien.
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