Ajuda programa de saque CaixaEletronico

Opa, eu estou tendo dificuldade para conseguir terminar este programa, sou iniciante em programação e com Java.
Tenho que criar um programa de caixa eletrônico, onde o mesmo precisa ter de entrada um valor (inteiro) e como saída precisa aparecer o total de cédulas que será “sacado”.
Até agora consegui criar uma parte, porém eu não sei como balancear, por exemplo, o valor que quero sacar é de 1652, o programa está saindo:
25 notas de 50
62 notas de 20
125 notas de 10
250 notas de 5
626 notas de 2
Por favor, se puderem me ajudar a chegar a uma lógica para balancear…
Meu código:
import javax.swing.JOptionPane;

/**

  • Contador de cedulas

  • @author matskira

  • @version 0.1
    */
    public class CaixaEltronico {
    static int valor;

    public static void calcular(int valor){
    int[] cedulas = {50,20,10,5,2};

    for(int i = 0; i < cedulas.length; i++){
    	if(valor > 3000) {
    		JOptionPane.showMessageDialog(null, "Valor de saque limite diario eh de 3000!");
    	}
    	else {
    		if( valor >= cedulas[i] ){
    			int resultado = valor/cedulas[i];
    			System.out.println( resultado + " notas de " + cedulas[i]);					
    		}
    		
    	}
    }
    

    }

    public static void main(String[] args) {
    calcular (valor = Integer.parseInt(JOptionPane.showInputDialog(“Digite o valor que deseja sacar:”)));
    }

}

Pelo que eu entendi, a pergunta que você quer resover é: “dado um valor e as notas disponíveis (todas, digamos), qual a forma de dividir esse valor usando a menor quantidade de notas possíveis?”

Se for, esse problema você resolve utilizando divisões inteiras (quocientes e restos). No seu exemplo, com 1652, seria feito da seguinte forma:

  1. Qual a maior nota que eu posso usar? 100.
  2. Em quantas partes inteiras eu consigo dividir 1652 por 100? 16 (16 notas de 100 vira parte da solução)
  3. Se eu tirar 1600 (16 notas de 100) de 1652, quanto sobra? 52
  4. Qual a maior nota que eu posso usar agora? 50
  5. Em quantas partes inteiras eu consigo dividir 52 por 50? 1 (1 nota de 50 vira parte da solução)
  6. Se eu tirar 50 (1 nota de 50) de 52, quanto sobra? 2
  7. Qual a maior nota que eu posso usar agora? 20
  8. Em quantas partes inteiras eu consigo dividir 2 por 20? 0
  9. Se eu tirar 0 (0 notas de 20) de 2, quanto sobra? 2 (0 notas de 20 vira parte da solução)

Se você reparar, existe uma repetição nessa estrutura. O desafio é codificar isso usando um loop e ifs. No final você vai ter algo do tipo: 16 notas de 100, 1 nota de 50, 0 notas de 20, 0 notas de 10, 0 notas de 5, 1 nota de 2.

Em Java, dados dois int, o operador de quociente é / e o de resto é %.

Essa explicação assume que o número de notas disponíveis é infinito. Fica um pouquinho mais complicado se tiver um limite de quantas notas de cada tipo pode usar, mas não é tão complicado, basta você impor esse limite quando calcular o quociente, ao invés de utilizar o resultado sem checar nada.

1 curtida

Obrigado, me ajudou muito.