Java - AYUDA!! COMO RESOLVER ESTE PROBLEMA PORFAVOR

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

AYUDA!! COMO RESOLVER ESTE PROBLEMA PORFAVOR

Publicado por luis (2 intervenciones) el 17/08/2020 22:22:37
Hola buen dia a todos

Les pido de su ayuda para saber como realizar este codigo en java, ya que es un trabajo que se esta solicitando en la escuela, pero a lo mucho que hemos llegado es un if /else, mismo que por mi cuenta estoy investigando para realizar este problema, les agradeceria mucho si me llegaran ayudar, en verdad se los agradeceria.

Los temas que estructuras selectivas (if, if-else, switch) y las estructuras iterativas (while, do-while, for), debe elaborar un programa que simule la operación de una maquina de cobro de estacionamiento.Las condiciones de uso son:
✓El usuario ingresará sus placas, esto dará pauta para determinar la tarifa a cobrar (pueden ingresar el tiempo)
✓El usuario ingresara su dinero, simulando 1 peso, con el número 1, 2 pesos con el número 2, 5 pesos con el número 5, 10 pesos con el número 10, 20 pesos con el número 20, 50 pesos con el número 50, 100 pesos con el número 100 y 200 pesos con el número 200.
✓Con el uso de dos números aleatorios, determinara la hora de llegada y salida
✓Deberá determinar la tarifa a cobrar si el costo por hora es de $21.00 pesos y el tiempo libre se cobra después de la sexto hora, el costo del tiempo libre es de 80 pesos
✓La maquina acepta monedas de 1,2,5 y 10 pesos, billetes de 20,50,100 y 200 pesos y la maquina da cambio
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: 2.717
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDA!! COMO RESOLVER ESTE PROBLEMA PORFAVOR

Publicado por Kabuto (706 intervenciones) el 18/08/2020 03:23:22
Hola.
Una lógica a seguir puede ser:

1º Pedir la placa. En realidad es un dato irrelevante, pero lo pide el enunciado.

2º Generar una hora de llegada y otra de salida.
Podemos generar dos números al azar con la clase Random, entre 0 y 24(excluido)
De estos dos números, el que sea menor se considerará la hora de llegada y el mayor será la hora de salida.

3º Calcular el importe a abonar.
Para ello primero calculamos la diferencia de tiempo en horas que ha estado estacionado, es decir:
int diferencia = hora salida - hora llegada;
Estas horas de diferencia, las seis primeras horas valen 21 pesos cada una. --> coste = diferencia * 21

Si hay más de 6 horas, se cobran las 6 primeras horas a 21 pesos y luego se le añade 80 pesos por tiempo libre.
coste = 6 * 21 + 80;

4º Tenemos el coste, ahora el usuario tiene que ir introduciendo monedas y billetes hasta completar el pago.
Para ello usamos un bucle while, en cada entrada restamos el importe introducido al coste, así que el bucle se va a repetir mientras sea mayor que 0
Antes de restar, comprobamos si es una moneda/billete de un importe válido, nada de por ejemplo billetes de 700 pesos xD
Si es valido, restamos. Si no, informamos por pantalla y volvemos a pedir.


5º Satisfecho el importe, cabe la posibilidad de que haya que devolver cambio. Si el coste ha quedado exactamente a 0 tras el bucle anterior donde el usuario ha introducido monedas, no hay que dar cambio. FIN DEL PROGRRAMA

Si el coste ha quedado con un valor negativo, es que hay que devolver cambio.
Nosotros también lo devolveremos con monedas y billetes que sean válidos, así que haremos un nuevo bucle donde "devolvemos" monedas hasta que el coste quede a 0.
Dentro del bucle calculamos cuál es la mayor moneda/billete que podemos dar para cubrir lo que se debe, la mostramos en pantalla y la SUMAMOS al coste (sumamos porque el coste es un valor negativo, así que para restarle hasta llegar a 0, hay que sumar)


Y listo, eso es todo.
Intenta hacer tú lo que puedas. Equivócate, atáscate.. y entonces nos muestras tu código y te ayudamos a seguir.

De todos modos, te dejo un código hecho por mí, pero insisto en que es mejor que primero intentes hacer uno tuyo.

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
import java.util.Random;
import java.util.Scanner;
 
public class Estacionamiento {
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		final int TARIFA_HORA = 21; //Cada hora, son 21 pesos
		int horaLlegada, horaSalida, coste;
		Random azar = new Random();
 
		System.out.println("Ingrese su placa: ");
		String placa = teclado.nextLine();
 
		//Generamos dos números entre 0 y 24(excluido)
		int azar1, azar2;
		do {
			azar1 = azar.nextInt(24);
			azar2 = azar.nextInt(24);
		} while(azar1 == azar2);//Si por casualidad son iguales, repetimos hasta que sean distintos
 
		//El que sea menor, será la hora de llegada.
		if (azar1 < azar2) {
			horaLlegada = azar1;
			horaSalida = azar2;
		}
		else {
			horaLlegada = azar2;
			horaSalida = azar1;
		}
		//Calculamos diferencia entre horas para decidir el coste a pagar
		int diferencia = horaSalida - horaLlegada;
		if (diferencia <= 6) //No pasa de 6 horas
			coste = diferencia * TARIFA_HORA;
		else //Pasa de 6 horas, se cobran 6 primeras horas y se añade 80 pesos por tiempo libre
			coste = 6 * TARIFA_HORA + 80;
		//Ya conocemos el coste, mostramos mensaje en pantalla para que usuario lo abone
 
		while (coste > 0) {
			System.out.println("\nVehiculo placa: " + placa);
			System.out.println("Llega: " + horaLlegada + "\tSale: " + horaSalida);
			System.out.println("Importe pendiente de ABONAR: " + coste + " pesos");
			System.out.println("\nIntroduzca monedas de 1,2,5, 10 o billetes de 20,50,100,200:");
			int pago = teclado.nextInt();
			//Comprobamos que la moneda/billete es válida antes de descontar del importe a abonar
			switch(pago) {
			case 1:
			case 2:
			case 5:
			case 10:
			case 20:
			case 50:
			case 100:
			case 200:
				//Pago aceptable, descontamos
				coste = coste - pago;
				break;
			default:
				//Pago no aceptable
				System.out.println("\nLa moneda/billete no es de curso legal, pruebe con otra...");
			}
		}
		/*
		 * Este bucle termina cuando se han ingresado suficientes pagos para abonar el importe.
		 * Pero hay que comprobar si hay que devolver cambio.
		 * Si la variable coste ha quedado con valor negativo, es que hay que devolver cambio
		 */
		System.out.println("\nImporte total ha sido ABONADO.");
		if (coste < 0) {
			System.out.println("Diferencia a su favor: " + coste);
			System.out.println("Retire su cambio a  continuación: ");
			//Un nuevo bucle, mostrará los pagos que recibe el usuario como cambio
			while (coste < 0) {
				if (coste <= -200) {
					System.out.println("-> Billete 200 pesos");
					coste = coste + 200;
				}else if (coste <= -100) {
					System.out.println("-> Billete 100 pesos");
					coste = coste + 100;
				}else if (coste <= -50) {
					System.out.println("-> Billete 50 pesos");
					coste = coste + 50;
				}else if (coste <= -20) {
					System.out.println("-> Billete 20 pesos");
					coste = coste + 20;
				}else if (coste <= -10) {
					System.out.println("-> Moneda 10 pesos");
					coste = coste + 10;
				}else if (coste <= -5) {
					System.out.println("-> Moneda 5 pesos");
					coste = coste + 5;
				}else if (coste <= -2) {
					System.out.println("-> Moneda 2 pesos");
					coste = coste + 2;
				}else if (coste <= -1) {
					System.out.println("-> Moneda 1 peso");
					coste = coste + 1;
				}
			}
		}
 
		System.out.println("\n\t\tGracias por usar nuestros servicios");
		teclado.close();
	}
}

En pantalla, tendríamos este resultado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ingrese su placa:
123
 
Vehiculo placa: 123
Llega: 14	Sale: 19
Importe pendiente de ABONAR: 105 pesos
 
Introduzca monedas de 1,2,5, 10 o billetes de 20,50,100,200:
200
 
Importe total ha sido ABONADO.
Diferencia a su favor: -95
Retire su cambio a  continuación:
-> Billete 50 pesos
-> Billete 20 pesos
-> Billete 20 pesos
-> Moneda 5 pesos
 
		Gracias por usar nuestros servicios
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