Bem… já que postaram a solução e hoje é sexta-feira… perdi 10 minutinhos aqui!
Esta é a forma de aplicar a solução de uma maneira totalmente procedural:
(Veja que o código é menor, porém mais dificil de enteder e as responsabilidades estão confusas)
public class Banco {
public static void main (String[] args) {
caixa (257);
}
public static void caixa (int valor) {
int[] notas = new int[6];
notas[0] = 100;
notas[1] = 50;
notas[2] = 20;
notas[3] = 10;
notas[4] = 5;
notas[5] = 2;
int[] qtdeNotas = new int[6];
int nota = 0;
while (nota < 6) {
if (valor >= notas[nota]) {
qtdeNotas[nota] = valor / notas[nota];
valor = valor % notas[nota];
}
nota++;
}
for (int x = 0; x < 6; x++) {
if (qtdeNotas[x] > 0) {
System.out.print(qtdeNotas[x] + "x de " + notas[x] + "R$");
if (x == 5) {
System.out.print(".");
} else {
System.out.print(",");
}
}
}
}
}
Esta é a forma de implementar Orientado a Objetos.
No caso a modelagem esta MUITO LONGE de ser o ideal, e também a questão das responsabilidades devesse ser mais quebrada, mas o foco é mostra aqui, que fica mais claro entender, além do que cada objeto tem uma parte da responsabilidade.
import java.util.ArrayList;
import java.util.List;
public class Banco2 {
class Caixa {
private List<Nota> listaNotas;
public Caixa() {
listaNotas = new ArrayList<Banco2.Nota>();
listaNotas.add(new Nota(100, "cem"));
listaNotas.add(new Nota(50, "cinquenta"));
listaNotas.add(new Nota(20, "vinte"));
listaNotas.add(new Nota(10, "dez"));
listaNotas.add(new Nota(5, "cinco"));
listaNotas.add(new Nota(2, "dois"));
listaNotas.add(new Nota(1, "hum"));
}
public void calcularNotas(int valor) {
for (Nota nota : listaNotas) {
valor = nota.armazenarQuantidade(valor);
}
}
public String gerarTextoNotasCalculadas() {
StringBuilder sb = new StringBuilder("");
for (Nota nota : listaNotas) {
if (nota.getQuantidade() > 0) {
sb.append(String.valueOf(nota.getQuantidade()));
if (nota.getValor() > 1) {
if (nota.getQuantidade() > 1) {
sb.append(" notas ");
} else {
sb.append(" nota ");
}
} else {
if (nota.getQuantidade() > 1) {
sb.append(" moedas ");
} else {
sb.append(" moeda ");
}
}
sb.append("de ");
sb.append(nota.getDescricao());
if (nota.getValor() > 1) {
sb.append(" Reais. ");
} else {
sb.append(" Real. ");
}
}
}
return sb.toString();
}
}
class Nota {
private int valor;
private String descricao;
private int quantidade;
public Nota(int valor, String descricao) {
this.valor = valor;
this.descricao = descricao;
}
public int getQuantidade() {
return quantidade;
}
public String getDescricao() {
return descricao;
}
public int getValor() {
return valor;
}
public int armazenarQuantidade(int valorDinheiro) {
int valorRestante = valorDinheiro;
if (valorDinheiro >= valor) {
quantidade = valorDinheiro / valor;
valorRestante = valorDinheiro % valor;
} else {
quantidade = 0;
}
return valorRestante;
}
}
public static void main (String[] args)
{
caixa (3788);
}
public static void caixa (int valor) {
Caixa caixa = new Banco2().new Caixa();
caixa.calcularNotas(valor);
System.out.println(caixa.gerarTextoNotasCalculadas());
}
}
Queria deixar o amigo pensar… afinal… se quem ta estudando não quebra a cabeça, não aprende! Mas já que postaram é legal olhar as duas formas e entender!