Java - PROGRAMA PARA UN EUROMILLON EN JAVA

 
Vista:

PROGRAMA PARA UN EUROMILLON EN JAVA

Publicado por ka (1 intervención) el 15/11/2018 17:26:59
HOLA, queria ayuda porque no tengo ni idea de como hacer este programa, a continuacion os lo dejo a ver como lo hariais vosotros y yo hacerme una idea
GRACIAS

Objetivos:
• Lectura de datos con distintos formatos (Scanner)
• Impresión de datos con y sin formato (println y printf)
• Uso de moldes
• Uso de estructuras de control (if-else, switch)
• Uso de operadores lógicos y matemáticos
• Manejo de línea de comandos

El alumno debe demostrar el conocimiento y manejo de estos elementos, aunque tampoco es
imprescindible el uso de todos ellos para resolver la práctica. Se valorará positivamente el
correcto uso de otros elementos como métodos o bucles que se irán viendo en clase de teoría
hasta la fecha de entrega de la práctica, aunque no es obligatorio su uso para esta entrega.

Enunciado
Se desea implementar un sistema que implemente una casa de apuestas que actualmente sólo
puede emitir boletos para el Euromillón. El juego del Euromillón consiste en la selección de 5
números comprendidos en el rango [1-50] y otros dos números denominados estrellas en el
rango [0, 9].
Todo programa consta de 3 fases: lectura de datos, procesamiento de datos y salida de datos.

En este caso en cada fase se hará lo siguiente:
1. Lectura de datos
Si un usuario acierta una estrella se paga un precio P1 y si acierta un número se paga otro
precio P2 distinto por cada acierto. Así, si un usuario ha acertado 2 números y 1 estrella ganará
2*P2+1*P1 euros.
El valor al que se paga cada número (P2) y cada estrella (P1) se introduce como argumento por
línea de comandos. El precio será un número decimal, por ejemplo, 2.45345 euros por estrella
acertada y 3.54 euros por número acertado. Una vez leídos dichos números el programa
comenzará mostrando los siguientes mensajes:
Bienvenido a su Euromillón online.
Hoy el número acertado se paga a P2 euros.
Y la estrella acertada se paga a P1 euros.
Donde P1 y P2 serán los valores introducidos por línea de comandos. Los valores de P1 y P2
serán mostrados con una precisión de 2 decimales aunque para hacer el cálculo del premio
final se tendrán en cuenta todos los decimales que puedan tener los valores P1 y P2.
A continuación se preguntará si el usuario quiere que la combinación de datos se genere de
forma automática o manual. En caso de que el usuario haya seleccionado el modo manual, el
programa solicitará la lectura de 5 números y 2 estrellas. Si el usuario no ha introducido ni la
palabra “manual” ni “automatica”, entonces el programa finalizará con la frase:
El usuario introdujo mal el dato. Abortando programa.
2. Procesamiento
Si el usuario decide que quiere modo automático, entonces el programa generará una
combinación de 5 números y 2 estrellas que representará el boleto que juega el usuario.
En caso de que el usuario hubiera elegido modo manual hace falta comprobar si los datos
introducidos son erróneos o no, es decir, los estrellas están en el rango [0,9] y los números en
el rango [1, 50]. Si alguna estrella no está en dicho rango, el programa mostrará por pantalla el
siguiente error y finalizará dado que se ha detectado un error:
Se ha introducido estrellas fuera de rango
En caso de que fuera un número el que esté fuera de rango el programa finalizará dado que se
ha detectado un error y el mensaje a mostrar sería:
Se ha introducido números fuera de rango
Si todos los datos están bien el mensaje será:
Todos los datos introducidos están dentro del rango correspondiente
Tanto en el caso manual como automático habrá que comprobar si se han introducido o no
números repetidos, es decir, no se puede jugar la combinación:
Números: 3, 45, 34, 45 y 27
Estrellas: 2 y 7,
porque el 45 es número que ha sido seleccionado dos veces.
En caso de que existe al menos un número o estrella repetido el programa mostrará el
siguiente mensaje por pantalla:
Lo sentimos, algunos de los datos introducidos están repetidos
y el programa no continuará haciendo ningún cálculo más.
A continuación el programa preguntará al usuario si quiere visualizar la combinación generada.
Si introduce que sí quiere ver la combinación generada ésta se visualizará, mientras que si
introduce cualquier otro texto no se visualizará.

Una vez se tiene la combinación del usuario es necesario que el programa genere de forma
aleatoria la combinación ganadora del sorteo. Como la combinación se hace de forma
aleatorio podría darse el caso de que aparecieran números repetidos, en este caso, la
combinación ganadora pasaría a ser fija: 14, 16, 22, 34, 45 como números y como estrellas 2 y
9. Dicha combinación ganadora se mostrará por pantalla para que el usuario la conozca.
Después de obtener la combinación ganadora el siguiente paso será la comprobación la
cantidad de números y estrellas acertados. En caso de tener algún acierto el programa
calculará como se comentó anteriormente el premio que le corresponde al usuario.
3. Salida
El programa mostrará que números y/o estrellas ha acertado el usuario, para ello usará un
mensaje para cada acierto. Los mensajes serán de la forma:
Ha acertado el número 45
Ha acertado la estrella 2
Si el usuario ha ganado algún premio el programa imprimirá por pantalla con una precisión de
2 decimales un mensaje como éste:
El usuario ha ganado 3.45 euros. Enhorabuena.
Si no ha acertado ninguna estrella ni número se mostrará el siguiente mensaje:
Lo sentimos. Boleto no premiado.
El programa siempre, independientemente de si hubo algún error o se calcularon
perfectamente las combinaciones y los premios ganados, finalizará mostrando el mensaje:
Gracias por usar nuestro programa. Hasta la próxima.
Nota1: Para la lectura de números aleatorios se utilizará el método random() de la clase Math
(Math.random()), el cual devuelve un número con formato double comprendido en el intervalo
[0,1).
Nota2: Es recomendable evitar el uso de acentos tanto en las cadenas que se introducirán por
teclado (manual, automática, si, no……) como en los mensajes que se mostrarán por pantalla.
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

PROGRAMA PARA UN EUROMILLON EN JAVA

Publicado por Kabuto (1381 intervenciones) el 17/11/2018 00:58:20
Hola.
El programa pide muchas cosas y si piensas en como resolver el TODO, el cerebro se te hará papilla.

No pienses en el TODO, proponte objetivos menores para resolverlo paso a paso.

Por ejemplo, empieza por intentar hacer esto:
El valor al que se paga cada número (P2) y cada estrella (P1) se introduce como argumento por
línea de comandos. El precio será un número decimal, por ejemplo, 2.45345 euros por estrella
acertada y 3.54 euros por número acertado. Una vez leídos dichos números el programa
comenzará mostrando los siguientes mensajes:
Bienvenido a su Euromillón online.
Hoy el número acertado se paga a P2 euros.
Y la estrella acertada se paga a P1 euros.
Donde P1 y P2 serán los valores introducidos por línea de comandos. Los valores de P1 y P2
serán mostrados con una precisión de 2 decimales aunque para hacer el cálculo del premio
final se tendrán en cuenta todos los decimales que puedan tener los valores P1 y P2.


SImplemente recoger los dos argumentos que llegan por línea de comandos, que serán dos valores String que habrá que parsear a double.
Una vez recogidos y parseados, mostrar ese saludo inicial.
Cosas a tener en cuenta:
-Los valores de los premios para las estrellas P1 y los números P2, son evidentemente datos importantes.
Así que convendría declarar dos variables globales de tipo double, que se pueden llamar P1 y P2, para que estén accesibles a cualquier método que luego vayamos a implementar.

- Lo de recibir por linea de comandos se refiere a que la idea es lanzar este programa desde la consola de Windows o Linux y teclearle los dos argumentos. Por ejemplo, si llamas a tu clase/programa principal EuroMillon, habría que teclear algo así:
java EuroMillon 2.45345 2.54
Donde el primer número sería el valor para asignar a P1 y el segundo para P2.
Al teclear eso, dichos valores entran el array de String llamado args, ya sabes, ese que siempre está en el parénteiss de todo metodo main.
1
public static void main(String[] args)

- El primer numero estará en args[0] y el otro en args[1]. Estos valores nos llegan como String, por lo tanto habrá que parsearlos a double para poder guardarlos en P1 y P2.
Así que, primero habrá que comprobar si nos han llegado dichos argumentos, si solo hay uno, o ninguno, el programa no podrá lanzarse y simplemente habrá que mostrar un mensaje explicando el problema.
Si tenemos argumentos suficientes, habrá que parsearlos, por ejemplo:
1
P1 =  Double.parseDouble(args[0]);
Este proceso puede provocar excepciones, pues quizás el usuario ha metido letras o vete a saber que.
Hay que usar TRY CATCH para controlar esta excepción y en caso de ocurrir, de nuevo hay que informar el usuario de que ha habido un error y que revise que está tecleand solo números y suando el punto decimal correcto.

- NO se que IDE estás usando, pero para evitarte la molestia de estar tecleando continuamente por consola el nombre de tu clase java más los argumentos, la mayoria de IDE te permiten establecer unos argumentos fijos.
Yo uso ECLIPSE y basta con que vayas a la opcion "Run Configurations", y en la pestaña "Arguments", en el campo "Program Arguments" pones los dos valores que quieras separados por un espacio. Ejemplo:
2.45345 3.54

- Una vez tengas los datos parseados a double, puedes lanzar el mensaje de bienvenida que pide el enunciado. Utiliza printf para redondear esos números double a solo dos decimales.

Intenta realizar esto por tu cuenta. En serio, es muy importante que lo intentes, aunque no lo consigas. De hecho, la mejor forma de aprender es quedarse atascado e intentar buscar la solución por uno mismo.
Leer el código resuelto por otros, es mucho menos didáctico.

Aún así, abajo te pongo como hecho yo para conseguir este primer objetivo. Tu decides si quieres verlo ya o intentar primero realizar tu código y luego comparar.
Luego iremos viendo como realizar el resto del programa. No tengo mucho tiempo libre, así que ni yo mismo puedo completarlo de una sola sentada.
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
public final class EuroMillon {
 
	static double P1; //Valor de las ESTRELLAS
	static double P2; //Valor de los NUMEROS
 
	public static void main(String[] args) {
 
		/*
		 * Comenzamos recogiendo los valores de pago de P1 y P2.
		 * Estos nos llegan como argumentos por la linea de comandos, es decir,
		 * están en el array de String args que recibe este método main().
		 * Estos valores nos llegan en String y hay que parsearlos a double.
		 * Este proceso puede fallar si el usuario ha errado al elegir entre coma y punto
		 * o bien ha puesto letras mezcladas con numeros, lo cuál produciría una excepción
		 * al parsear los datos.
		 * Usamos TRY CATCH para controlar esta posibilidad, además de comprobar primero
		 * si hemos recibido realmente algún parámetro o no.
		 */
		if (args.length < 2) //Argumentos insuficientes. No podemos poner en marcha el programa
		{
			System.out.println("ERROR.\nEl programa requiere de dos argumentos: el valor que se paga por cada estrella(P1)"
					+ " y el valor que se paga por cada numero(P2).");
		}
		else//Argumentos suficientes. A ver si podemos parsearlos a double. Si no es posible, el programa tampoco se pondrá en marcha
		{
			if (parseaArgumentos(args)) //Solo si esto es true, podremos continuar con el programa.
			{
				mensajeBienvenida(); //Para que el main() no sea demasiado extenso, prefiero delegar ciertas cosas en metodos separados
			}
		}
 
		System.out.println("\n\tGracias por usar nuestro programa. Hasta la proxima.");
 
	}
 
	/**
	 * Intentará parsear a double los argumentos recibidos y los guardará en las
	 * variables globales P1 y P2. Si no lo consigue, informará en pantalla y devolverá
	 * false para que el main() sepa que no tiene datos con los que poder seguir trabajando.
	 * @param args Array de argumentos con los valores obtenidos desde linea de comandos.
	 * @return True o False según si pudo parsear o no los datos.
	 */
	static boolean parseaArgumentos(String[] args)
	{
		try {
			P1 = Double.parseDouble(args[0]);
			P2 = Double.parseDouble(args[1]);
			return true; //El parseo ha tenido exito
		} catch (NumberFormatException e) {
			System.out.println("ERROR.\nEL formato de los argumentos no es valido.\nUse solo numeros naturales"
					+ " y revise el uso del punto o coma decimal.");
			return false;
		}
	}
 
	/**
	 * Simplemente da la bienvenida inicial una vez hemos recuperado correctamente
	 * los argumentos recibidos
	 */
	static void mensajeBienvenida()
	{
		System.out.println("\tBienvenido a su Euromillon online.\n");
		System.out.printf("Hoy el NUMERO acertado se paga a %.2f euros.\n", P2);
		System.out.printf("Y la ESTRELLA acertada se paga a %.2f euros.\n", P1);
	}
 
}
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