Java - Ayuda con un ejercicio

 
Vista:
Imágen de perfil de bobopachita

Ayuda con un ejercicio

Publicado por bobopachita (5 intervenciones) el 05/10/2022 12:52:16
Hola buenas estoy empezando con java y tengo que hacer este ejercicio:
Escriba un programa que te permita jugar a la “primitiva”. Para facilitar la labor de depuración de errores, cada vez que el usuario introduzca un número se mostrará el boleto con los números que debe acertar.

Las condiciones del ejercicio son:

El programa debe generar una secuencia de números no repetidos como si fuera un boleto (9 números; mayores de 10 y menores de 100).

12 21 35 46 88 72 94 49 27

Después el usuario escribirá un numero:

Si existe, mostrará lo siguiente:

12 21 35 XX 88 72 94 49 27

Si no existe, mostrará lo siguiente:

Número 78 no existe

12 21 35 46 88 72 94 49 27

Se puede salir de la aplicación cuando el usuario escriba 0.

En caso de tener todos los números tachados, se mostrará:

Te ha tocado la primitiva. Eres millonario.

Existirá un número máximo de 15 intentos para acertar los números del boleto.



Para crear un número aleatorio en Java

int valor = Math.floor(Math.random()*99+10);


De momento tengo esto codificado:

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
import java.util.Random;
import java.util.Scanner;
 
import javax.swing.JOptionPane;
 
public class principal {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Scanner sc = new Scanner(System.in);
 
		int [] numeroaleatorio = new int [9];
		int [] numero_jugar = new int [9];
 
		int opcion=0;
		int intentos=15;
		int numero=0;
		boolean jugar = true;
		int fallos=0;
		int control=0;
		int contador=0;
 
 
		System.out.println("Loterias y apuesta del estado ");
		System.out.println("1 Jugar a la bonoloto ");
		System.out.println("0 SALIR");
		System.out.println("Elige una opcion ");
		opcion = sc.nextInt();
 
		if(opcion==0) {
			System.out.println("Gracias por jugar! ");
		}else {
			///GENERO LOS NUMEROS RAMDON
			for(int i=0; i<numeroaleatorio.length;i++) { // CON ESTE FOR MOSTRAMOS LOS 9 NUMEROS ALEATORIOS
				numeroaleatorio[i] = (int) Math.floor(Math.random()*99+1); // GENERAMOS LOS NUMEROS ALEATORIOS
			}
		}
 
		System.out.println("Los numeros que tienes que adivinar es: ");
		// Imprime palabra_jugar con tantos "_" o "letras" acertadas lleve el jugador
		for (int i = 0; i < numeroaleatorio.length; i++) {
			System.out.print(numeroaleatorio[i] + " XX ");
		}
 
		System.out.println();
		System.out.println();
 
		System.out.println("Usuario elige tus 9 numeros ");
		for(int i=0;i<numero_jugar.length;i++) {
			System.out.print(numero_jugar[i] + " ");
			numero = sc.nextInt();


Mi duda es, que no se como hacer para que cuando el usuario introduzca un numero y este sea uno de los números aleatorios se destape arriba en la XX y siga intentando acertar el número, alguien puede darme una pista? muchas 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

Ayuda con un ejercicio

Publicado por Kabuto (1381 intervenciones) el 06/10/2022 01:37:06
Yo cambiaría la estrategia, si es que es posible para este ejercicio.

El array en lugar de int, lo haría de String, porque así ya no habría problema en cambiar los números acertados por la cadena "XX"

Y ahora mismo, tu sistema para generar aleatorios no garantiza que no se repitan números. Para eso también usaría otra estrategia.
Primero crear un array con TODOS los números que son válidos, es decir del 11 al 99.

Luego, de ese array vamos escogiendo algunos de esos números "válidos" de forma aleatoria para construir el array de 9 String, que sería el boleto.
Cada vez que escogemos un número válido, lo marcamos como "null" para que a la siguiente selección, no lo volvamos a escoger. Así garantizamos que el boleto no tendrá números repetidos.

Por cierto, todo este proceso yo lo haría en un método separado, que se encargue exclusivamente de generar boletos.
Aunque no se si ya te han enseñado a "modular" el programa, es decir, a separar el código en métodos (procedimientos y funciones) que se encarguen de tareas específicas y así no tenerlo todo junto y caótico.

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
private static String[] generarBoleto() {
 
		String[] boleto = new String[9];
 
		//Primero generamos en un array todos los posibles números válidos
		Integer[] numerosValidos = new Integer[89];
		int valido = 11;
		for (int i = 0; i < numerosValidos.length; i++) {
			numerosValidos[i] = valido;
			valido++;
		}
		/*
		 * Ahora escogeremos 9 números válidos al azar para construir el boleto.
		 * Para evitar repeticiones, cada vez que escogemos un número,
		 * lo marcaremos como null para saber que no debemos volver a seleccionarlo
		 */
		Random azar = new Random();
		for (int i = 0; i < boleto.length; i++) {
			Integer escoger = null;
			//Se repite hasta obtener un número que no sea null, o sea, no repetido
			while (escoger == null) {
				//Generamos posicion del array al azar
				int pos = azar.nextInt(90);
				//Escogemos número
				escoger = numerosValidos[pos];
				//Si hemos escogido un "no repetido"...
				if (escoger != null)
					numerosValidos[pos] = null;//Lo marcamos como null para no volver a cogerlo más
			}
			//Ya tenemos número escogido, lo convertimos a String y lo pasamos al boleto
			boleto[i] = escoger.toString();
		}
		//Boleto completado
		return boleto;
	}

Comprueba que entiendes este código antes de continuar.

Teniendo ese método, ya luego en el programa principal al comenzar la ronda de apuestas vamos mostrando en cada ronda el boleto generado y pedimos un número al usuario.
Si existen en el array, lo sustituimos por la cadena "XX". Así la próxima vez que mostremos el boleto, ya saldrá tachado el número acertado.

Todo esto lo vamos haciendo en un bucle donde vamos contando los intentos y los aciertos.
Si acumula 9 aciertos, la ronda termina y el jugador es millonario.
Si agota los 15 intentos, la ronda termina y el jugador sigue siendo pobre.

Este podría ser el programa completo. Pregunta si algo no lo entiendes. Un saludo.
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
import java.util.Random;
import java.util.Scanner;
 
public class Primitiva {
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
 
		int opcion = 0;
		while (opcion != 2) {
			System.out.println("\n[1] - Jugar a la Primitiva");
			System.out.println("[2] - Cerrar aplicacion");
			System.out.print("Elija: ");
			opcion = Integer.parseInt(teclado.nextLine());
 
			if (opcion == 1) {
				String[] boleto = generarBoleto();
				int intentos = 15;
				int aciertos = 0;
				//Mostramos el boleto
				System.out.print("\nBoleto: ");
				for (String numero: boleto)
					System.out.print(numero + " ");
				//Comienza la ronda de apuestas
				while (intentos > 0 && aciertos < 9) {
					//Oportunidades restantes
					System.out.println("\n\nIntentos restantes: " + intentos);
					//Pedimos número
					System.out.print("\nJuegue un número: ");
					String apuesta = teclado.nextLine();
					intentos--;
 
					if (apuesta.equals("0"))
						break; //Ponemos fin a esta ronda
					else {
						//Comprobamos si ha acertado
						boolean acertado = false;
						for (int i = 0; i < boleto.length; i++) {
							if (boleto[i].equals(apuesta)) {
								acertado = true;
								boleto[i] = "XX";
								aciertos++;
							}
						}
						//Mostramos boleto
						System.out.print("\nBoleto: ");
						for (String numero: boleto)
							System.out.print(numero + " ");
 
						//Comprobamos si ha acertado
						if (!acertado)
							System.out.println("\nNumero " + apuesta + " no existe.");
 
						//Comprobamos si la ronda va a terminar
						if (aciertos == 9)
							System.out.println("\nTe ha tocado la primitiva. Eres millonario.");
						else if (intentos == 0)
							System.out.println("\nIntentos agotados. Fin de la ronda.");
					}
				}
			}
			else if (opcion == 2)
				System.out.println("\n\t\tFIN DE PROGRAMA");
			else
				System.out.println("Opción equivocada");
		}
		teclado.close();
	}
 
	/*
	 * Método que genera un boleto de 9 números no repetidos
	 * aleatorios mayores de 10 y menores que 99.
	 */
	private static String[] generarBoleto() {
 
		String[] boleto = new String[9];
 
		//Primero generamos en un array todos los posibles números válidos
		Integer[] numerosValidos = new Integer[89];
		int valido = 11;
		for (int i = 0; i < numerosValidos.length; i++) {
			numerosValidos[i] = valido;
			valido++;
		}
		/*
		 * Ahora escogeremos 9 números válidos al azar para construir el boleto.
		 * Para evitar repeticiones, cada vez que escogemos un número,
		 * lo marcaremos como null para saber que no debemos volver a seleccionarlo
		 */
		Random azar = new Random();
		for (int i = 0; i < boleto.length; i++) {
			Integer escoger = null;
			//Se repite hasta obtener un número que no sea null, o sea, no repetido
			while (escoger == null) {
				//Generamos posicion del array al azar
				int pos = azar.nextInt(90);
				//Escogemos número
				escoger = numerosValidos[pos];
				//Si hemos escogido un "no repetido"...
				if (escoger != null)
					numerosValidos[pos] = null;//Lo marcamos como null para no volver a cogerlo más
			}
			//Ya tenemos número escogido, lo convertimos a String y lo pasamos al boleto
			boleto[i] = escoger.toString();
		}
		//Boleto completado
		return boleto;
	}
}
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 bobopachita

Ayuda con un ejercicio

Publicado por bobopachita (5 intervenciones) el 06/10/2022 11:01:09
Muchas gracias por tu ayuda @Kabuto estoy empezando con las funciones y tener el código más limpio, ahora con tu explicación voy a intentarlo hacerlo sin copiarme, te lo agradezco mucho!!!!!!!!! y eres un crack! =)
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