Java não subtraí número menor que 1 na repetição

2 respostas
E

Eu estou tendo dificuldades para desenvolver a seguinte aplicação: Ler o valor de troco que uma pessoa irá digitar,de acordo com o valor mostrar quantas cédulas de 100,50,20,10,5 ou 2 serão necessárias e,se necessárias moedas mostrar quantas de 50,25,10 e 5 centavos.

O problema está na verificação das moedas,quando eu coloco por exemplo 0.70(que iria retornar duas moedas de 10 e uma de 50 centavos,só retorna a de 50 centavos),se puderem me ajudar ficarei grato.

import java.util.*;
import java.util.Locale;
public class ex1trococonsole
{
	

	public static void main(String[]args)
	{
		double n;
		int contcincocent=0,contdezcent=0,contvintecincocent=0,contcinquentacent=0,contum=0,contdois=0,contcinco=0,contdez=0,contvinte=0,contcinquenta=0,contcem=0;
		Scanner aux = new Scanner(System.in);
		aux.useLocale(Locale.ENGLISH);  
		System.out.print("Digite o valor:");
		n = aux.nextDouble();
		

		do
		{
			if(n>=100)
			{
				
				if(n<100)
				{
					break;
				}
				else
				{
					n=n-100;
					contcem+=1;
					
				}
			}
			else if(n < 100 && n >=50)
			{
				
				if(n<50)
				{
					break;
				}
				
				else
				{
					n=n-50;
					contcinquenta+=1;
					
				}
			}
			else if(n< 50 && n>=20)
			{
				if(n<20)
				{
					break;
				}
				else
				{
					n=n-20;
					contvinte+=1;
					
				}
					}
			else if(n< 20 && n >=10)
			{	
				if(n<10)
				{
					break;
				}
				else
				{
					n=n-10;
					contdez+=1;
					
				}
				
			}
			else if(n < 10 && n>=5)
			{	
				if(n<5)
				{
			
					break;
				}
				else
				{
					n=n-5;
					contcinco+=1;
					
				}
				
			}	
			
			else if(n< 5 && n >=2)
			{
				if(n<2)
				{
					break;
				} 
				else
				{
					n=n-2;
					contdois+=1;
					
				}
				
			}
			else if(n< 2 && n>=1)
			{
				if(n<1)
				{
					break;
				}
				else
				{
					n=n-1;
					contum+=1;
					
				}
				
			}
			else if(n<1 && n>=0.50)
			{
				if(n<0.50)
				{
					break;
				}
				else
				{	
					n=Math.round(n-0.50);
					contcinquentacent+=1;
					
				}
				
			}
			else if(n<0.5 && n>= 0.25)
			{
				if(n<0.25)
				{
					break;
				}
				else
				{
					n=Math.round(n-0.25);
					contvintecincocent+=1;
					
					
				}
				
			}
			else if(n< 0.25 && n>=0.10)
			{
				if(n<0.1)
				{
					break;
				}
				else
				{
					n=Math.round(n-0.10);
					contdezcent+=1;
					
				}
			}
			
			else if(n< 0.1 && n>=0.05)
			{
				if(n<0.05)
				{
					break;
				}
				else
				{
				
					n=Math.round(n-0.05);
					contcincocent+=1;
					
				}
				
			}
			
			}
		
		while(n>0);
		System.out.println("Notas de cem: "+contcem);
		System.out.println("Notas de cinquenta: "+contcinquenta);
		System.out.println("Notas de vinte: "+contvinte);
		System.out.println("Notas de dez: "+contdez);
		System.out.println("Notas de cinco: "+contcinco);
		System.out.println("Notas de dois: "+contdois);
		System.out.println("Moedas de um real:"+contum);
		System.out.println("Moedas de cinquenta centavos:"+contcinquentacent);
		System.out.println("Moedas de vinte e cinco centavos: "+contvintecincocent);
		System.out.println("Moedas de dez centavos: "+contdezcent);
		System.out.println("Moedas de cinco centavos:"+contcincocent);
		
		}
	}

2 Respostas

E

Vou te dar uma dica.

Seu erro está aqui:

while(n>0);
CWeiler

Você está jogando fora os decimais da sua variável double:

>>>> n=Math.round(n-0.50);

Outras dicas:

1. Você está fazendo exageros na codificação:
if(n>=100)  
            {  
                  
                if(n<100)  //<< aqui é impossível ser <100
                {  
                    break;  
                }  
                else  
                {  
                    n=n-100;  
                    contcem+=1;  
                      
                }  
            }  
            else if(n < 100 && n >=50)  //<< aqui é impossível ser <100
...
Melhorado:
if(n>=100)   {  
    n=n-100;  
    contcem+=1;  
}   else if(n >=50)  {

2. O uso de float ou double pode te trazer problemas nos cálculos de precisão (>=).
Sugestões: trabalhe com int e multiplique tudo por 100, ou trabalhe com BigDecimal.

Criado 7 de outubro de 2014
Ultima resposta 8 de out. de 2014
Respostas 2
Participantes 3