Caros Amigos,

Pretendo demonstrar neste artigo uma aplicação Java para calcular o troco no pagamento de uma conta. Como resultado será apresentado também o valor inteiro do troco dividido em notas de R$ 100,00 - R$ 50,00 - R$ 20,00 - R$ 10,00 - R$ 5,00 - R$ 2,00 e R$ 1,00, respectivamente. E ainda, a parte fracionária do troco será dividida em moedas de R$ 0,50 - R$ 0,25 - R$ 0,10 - R$ 0,05 e R$ 0,01, respectivamente.

Calculando o Troco no Java

Implementar a classe principal Java Troco como demonstrado a seguir:

import java.text.DecimalFormat;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Troco {

  public static void main(String[] args) {
    Scanner ler = new Scanner(System.in);

    double conta, pago;

    try {
      System.out.printf("Informe o Valor da Conta: ");
      conta = ler.nextDouble();

      System.out.printf("Informe o Valor Pago....: ");
      pago = ler.nextDouble();

      System.out.printf("%s", calculaTroco(conta, pago));
    }
    catch (InputMismatchException e) {
      System.err.printf("\nErro: dados informados inválidos !!!\n");
    }
  }
 
  public static String calculaTroco(double conta, double pago) {
    DecimalFormat formatador = new DecimalFormat("###,##0.00");
    if (pago < conta)
       return("\nPagamento insuficiente, faltam R$"+
         formatador.format(conta - pago) +"\n");
   else {
      int nota[] = {100, 50, 20, 10, 5, 2, 1};
      int centavos[] = {50, 25, 10, 5, 1};

      String result;
      double troco;
      int i, vlr, ct;

      troco = pago - conta;
      result ="\nTroco = R$"+ formatador.format(troco) +"\n\n";

// definindo as notas do troco (parte inteira)
      vlr = (int)troco;
      i = 0;
      while (vlr != 0) {
        ct = vlr / nota[i]; // calculando a qtde de notas
        if (ct != 0) {
           result = result + (ct +"nota(s) de R$"+ nota[i] +"\n");
           vlr = vlr % nota[i]; // sobra
        }
        i = i + 1; // próxima nota
      }

      result = result +"\n";

// definindo os centavos do troco (parte fracionária)
      vlr = (int)Math.round((troco - (int)troco) * 100);
      i = 0;
      while (vlr != 0) {
        ct = vlr / centavos[i]; // calculando a qtde de moedas
        if (ct != 0) {
           result = result + (ct +"moeda(s) de"+ centavos[i] +
           "centavo(s)\n");
           vlr = vlr % centavos[i]; // sobra
        }
        i = i + 1; // próximo centavo
      }

      return(result);
    }
  }

}

Entendendo o algoritmo implementado no método calculaTroco:

  1. os vetores "nota" e "centavos" representam os valores das notas e centavos, respectivamente, usados nos cálculos das quantidades individuais na divisão do troco.
  2. inicialmente é verificado se o valor pago é suficiente para o pagamento da conta.
  3. a divisão do troco é realizada em duas partes:
    1. dividindo a parte inteira do troco da maior nota (R$ 100,00) para a menor nota (R$ 1,00) até zerar o valor inteiro do troco. O operador / é usado para calcular a quantidade de notas já o operador % foi utilizado na expressão que calcula a sobra.
    2. dividindo a parte fracionária do troco da maior moeda (R$ 0,50) para a menor moeda (R$ 0,01) até zerar o valor fracionário do troco. Novamente os operadores / e % são utilizados nas expressões que fazem a divisão da parte fracionária do troco em moedas.

Ao executar a aplicação deve-se informar o valor da conta e o valor pago e o seguinte resultado poderá ser exibido:

Troco no Java

Veja também:

1) Separando a Parte Inteira e a Parte Fracionária de Valores do Tipo Real
2) Calculando o Troco em uma Aplicação Delphi

Prof. Omero Francisco Bertol: http://www.pb.utfpr.edu.br/omero/
Aplicações Java: (http://www.pb.utfpr.edu.br/omero/Java/Fontes.HTM)

Links Úteis

Saiba mais sobre Java ;)

  • Guias de Linguagem Java:
    Neste Guia de Referência você encontrará todo o conteúdo que precisa para começar a programar com a linguagem Java, a sua caixa de ferramentas base para criar aplicações com Java.
  • Enums no Java:
    Aprenda nesse microexemplo como criar e utilizar enums no Java. Confira como esse poderoso recurso permite a definição de um conjunto limitado de valores para uma variável.
  • Números mágicos: O que são e como corrigir:
    Confira o que são números mágicos e como reconhecer a presença dessa má prática de programação em códigos. Veja ainda quais recursos da linguagem Java podem ser utilizados para corrigir esse problema.