Tempo de leitura: menos de 1 minuto
Fala aí pessoal, prontos para o CodeKata #2?
Mesmo com poucas pessoas participando efetivamente do CodeKata #1, o resultado foi muito legal, várias pessoas do trabalho comentaram que vão participar próximo quando houver. Então porque parar?
Regras
As regras são as mesmas, com exceção do prazo para entrega:
- O desafio será dado, e qualquer leitor poderá participar.
- O participante terá 10 dias para dar uma solução para o problema.
- A solução deverá ser escrita em Java ou Groovy.
- A solução deve ser enviada através do formulário no fim do post.
- As melhores soluções e seus autores serão divulgadas em um post no dia previamente fixado.
Desafio: Caixa Eletrônico
Enviar a solução até: 21/02/2016
Divulgação do resultado dia: 22/02/2016
Um caixa eletrônico opera com alguns tipos de notas disponíveis (R$ 50,00, R$ 20,00, R$ 10,00, R$ 5,00 e R$2,00), mantendo um estoque de cédulas para cada valor. Os clientes do banco, podem efetuar saques de um certo valor.
Escreva um programa que, dado o valor solicitado (v) pelo cliente, determine o número de cada uma das notas necessário para totalizar esse valor, de modo a minimizar a quantidade de cédulas entregues.
Exemplo 1: Se o cliente deseja retirar R$ 50,00, basta entregar uma única nota de cinquenta reais.
Exemplo 2: Se o cliente deseja retirar R$ 92,00, é necessário entregar uma nota de R$50,00, duas de R$ 20,00 e uma de R$2,00.
Restrições
- 0 < v ≤ 10000.
- Estoque de notas: deverá se informado pelo QuantidadeNotaTO.
- O valor solicitado pelo usuário deve corresponder exatamente a quantidades de notas dispensadas pelo caixa eletrônico.
Interface a ser implementada e TO
Implemente a interface:
[code language=”java”]
public interface ICaixaEletronicoService {
/**
* Método usado para informar o estoque de notas. Este método serve apenas para informar o estoque inicial de notas,
* funcionará como um setter para um atributo da classe.
* O nome do método não ficou legal…. Sorry!!
* @param pQuantidadeNotas
**/
public void contarNotas(QuantidadeNotaTO pQuantidadeNotas);
/**
* Método retornará um objeto do tipo QuantidadeNotaTO com a quantidade de notas necessárias para compor o valor informado por parametro.
* @param pValor
* @throws ImpossivelSacarException
**/
public QuantidadeNotaTO sacar(BigDecimal pValor) throws ImpossivelSacarException;
}
[/code]
Esse deve ser o objeto de retorno, o mesmo será usado para definir o estoque de notas:
[code language=”java”]
public class QuantidadeNotaTO {
private Integer notas10;
private Integer notas2;
private Integer notas20;
private Integer notas5;
private Integer notas50;
public QuantidadeNotaTO(final Integer pQuantidadeNotas2,
final Integer pQuantidadeNotas5, final Integer pQuantidadeNotas10,
final Integer pQuantidadeNotas20, final Integer pQuantidadeNotas50) {
notas2 = pQuantidadeNotas2;
notas5 = pQuantidadeNotas5;
notas10 = pQuantidadeNotas10;
notas20 = pQuantidadeNotas20;
notas50 = pQuantidadeNotas50;
}
public QuantidadeNotaTO() { }
public Integer getNotas2() { return notas2; }
public Integer getNotas5() { return notas5; }
public Integer getNotas10() { return notas10; }
public Integer getNotas20() { return notas20; }
public Integer getNotas50() { return notas50; }
public void setNotas2(final Integer pNotas2) {notas2 = pNotas2;}
public void setNotas5(final Integer pNotas5) {notas5 = pNotas5;}
public void setNotas10(final Integer pNotas10) {notas10 = pNotas10;}
public void setNotas20(final Integer pNotas20) {notas20 = pNotas20;}
public void setNotas50(final Integer pNotas50) {notas50 = pNotas50;}
}
[/code]
Nota: 19/02/2016 – Pessoal, faltou adicionar os setters, para quem quiser controlar a notas do estoque no próprio TO.
Código da exception:
[code language=”java”]
public class ImpossivelSacarException extends Exception {
public ImpossivelSacarException(final String message) {
super(message);
}
}
[/code]
Nota: Projeto disponível no GitHub.
Observação: A classe QuantidadeNotaTO é usada tanto para setar o estoque de notas, quando para retornar o resultado.
Espero que gostem!!
Convide seus amigos para o desafio.
Formulário para envio da solução
[contact-form][contact-field label=’Nome’ type=’name’ required=’1’/][contact-field label=’Email’ type=’email’ required=’1’/][contact-field label=’Cole sua implementação aqui’ type=’textarea’ required=’1’/][/contact-form]
Abraços

Link permanente
Link permanente
Link permanente
Link permanente