Java - Ayuda con problema de ejecución (Código Sencillo)

 
Vista:
Imágen de perfil de Connor665

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Connor665 (7 intervenciones) el 09/11/2016 12:42:27
Buenas, es un ejercicio de clase(imagino que ya lo habréis visto por internet). El problema se encuentra en la ejecución final, no entiendo por qué me da las monedas que quiere en vez de dármelas por orden ya que las operaciones las hago en orden. Muchas Gracias :)
EJERCICIO:
Escriba un programa en Java que nos calcule el cambio que debe dar la caja de
un supermercado: Dado un precio y una cantidad de dinero, el programa nos dirá
cuántas monedas deben darse como cambio de tal forma que el número total de
monedas sea mínimo(AQUÍ ES DONDE DIGO QUE ESTÁ EL PROBLEMA, EN QUE NO SON LAS MONEDAS MÍNIMAS).


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 Cambio
{
	public static void main(String[]args)
	{
	 int opt;
	 int   mon1=0, mon2=0, mon5=0, mon10=0, mon20=0, mon50=0, mon100=0, mon200=0;
	 float centimosExtra=0, totalCentimos=0, cambio=0, dinero=0, precio=0, precio1=9.99f, precio2=14.99f, precio3=242.95f;
	 Scanner teclado=new Scanner(System.in);
 
	 System.out.println("¿Qué desea comprar?");
	 System.out.println("1.Ratón: " + precio1 + "€");
	 System.out.println("2.Teclado: " + precio2 + "€");
	 System.out.println("3.Monitor: " + precio3 + "€");
	 System.out.println("4.SALIR");
	 opt=teclado.nextInt();
 
	 switch(opt)
	 {
	  case 1:
	  	 precio=precio1;
	 	 System.out.println("Ratón: " + precio1 + "€");
		 break;
	  case 2:
		 precio=precio2;
	 	 System.out.println("Teclado: " + precio2 + "€");
		 break;
	  case 3:
		 precio=precio3;
	 	 System.out.println("Monitor: " + precio3 + "€");
		 break;
	  case 4:
		 System.exit(0);
	 	 break;
	  default:
		  System.out.println("Opción no válida...");
		  break;
	 }
 
	while((dinero<precio) || (dinero<=0))
	{
	 System.out.print("Efectúe su pago: ");
	 dinero=teclado.nextFloat();
 
	 if((dinero<precio) || (dinero<=0)) System.out.println("ERROR");
 
	}
 
	cambio=dinero-precio;
	System.out.println("El cambio es: " + cambio);
 
	totalCentimos=cambio*100;
	mon200=(int)totalCentimos/200;
	centimosExtra=totalCentimos-(mon200*200);
	mon100=(int)centimosExtra/100;
	centimosExtra=totalCentimos-(mon100*100);
	mon50=(int)centimosExtra/50;
	centimosExtra=totalCentimos-(mon50*50);
	mon20=(int)centimosExtra/20;
	centimosExtra=totalCentimos-(mon20*20);
	mon10=(int)centimosExtra/10;
	centimosExtra=totalCentimos-(mon10*10);
	mon5=(int)centimosExtra/5;
	centimosExtra=totalCentimos-(mon5*5);
	mon2=(int)centimosExtra/2;
	centimosExtra=totalCentimos-(mon2*2);
	mon1=(int)centimosExtra/1;
 
 
	System.out.println("Cambio en monedas:");
	System.out.println("2€: " + mon200);
	System.out.println("1€: " + mon100);
	System.out.println("0.50€: " + mon50);
	System.out.println("0.20€: " + mon20);
	System.out.println("0.10€: " + mon10);
	System.out.println("0.05€: " + mon5);
	System.out.println("0.02€: " + mon2);
	System.out.println("0.01€: " + mon1);
	}
}
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

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Tom (1831 intervenciones) el 09/11/2016 14:55:28
Lo has hecho mal.
Después de las monedas de 2, el cálculo debe ser:

centimosExtra -= (mon100 * 100);

y así hasta el último.

Además verás que se pierde precisión (un céntimo); Intenta usar double en vez de float.
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 Connor665

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Connor665 (7 intervenciones) el 09/11/2016 15:19:38
No entiendo qué quieres decir exactamente con lo de después de las monedas de 2.
te refieres a que la línea 56 está mal? ---> centimosExtra=totalCentimos-(mon200*200);
Y lo de centimosExtra -= (mon100*100); no lo entiendo tampoco porque mon100 todavía no tiene un valor...
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

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Tom (1831 intervenciones) el 09/11/2016 15:40:32
Madre mia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mon200 = (int)totalCentimos / 200;
centimosExtra = totalCentimos - (mon200 * 200);
mon100 = (int)centimosExtra / 100;
centimosExtra = centimosExtra - (mon100 * 100);
mon50 = (int)centimosExtra / 50;
centimosExtra = centimosExtra - (mon50 * 50);
mon20 = (int)centimosExtra / 20;
centimosExtra = centimosExtra - (mon20 * 20);
mon10 = (int)centimosExtra / 10;
centimosExtra = centimosExtra - (mon10 * 10);
mon5 = (int)centimosExtra / 5;
centimosExtra = centimosExtra - (mon5 * 5);
mon2 = (int)centimosExtra / 2;
centimosExtra = centimosExtra - (mon2 * 2);
mon1 = (int)centimosExtra / 1;
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 Connor665

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Connor665 (7 intervenciones) el 09/11/2016 16:05:48
Solucionado, gracias. Pero tampoco hace falta ir tan sobrado eh. Yo llevo un mes en esto.
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

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Tom (1831 intervenciones) el 09/11/2016 20:01:47
Ni sobrado ni leches. Bastaba con un simple vistazo a tu código para entender lo que yo quería decir en mi primer comentario.
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 Álvaro

Ayuda con problema de ejecución (Código Sencillo)

Publicado por Álvaro (7 intervenciones) el 09/11/2016 15:29:14
Muchas gracias por tu tiempo! Le he echado un vistazo y hay cosas que no entiendo porque todavía no tengo los conocimientos suficientes. Pero lo iré analizando y aprendiendo de él. ^^
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