Desafio atualizado#4
Conversation
| @@ -0,0 +1,3 @@ | |||
| # Default ignored files | |||
| /shelf/ | |||
There was a problem hiding this comment.
É uma boa prática ignorar os arquivos/pastas:
- .idea
- out/
| package cafes; | ||
|
|
||
| public enum Acucar { | ||
| Nivel0("nenhuma"),Nivel1("pouquíssima"),Nivel2("pouca"),Nivel3("normal"),Nivel4("muito"),Nivel5("bastante"); |
There was a problem hiding this comment.
a descrição dos campos do enum poderia seguir o mesmo que vc fez com o campo quantidadeDeAcucar (que poderia chamar descrição ao invés de quantidade, quantidade me remete a um número, o que acha?)
Uma convenção de nomenclatura para campos de enum é seguir o padrão UPPER_CASE, então poderia ser, por exemplo, NIVEL_0 ou NENHUMA, e assim por diante
| public class Bebida { | ||
| private int id; | ||
| private String nome; | ||
| Receitas receita; |
There was a problem hiding this comment.
- Uma bebida tem várias Receitas? O nome da classe Receitas ficou no plural errado ou a ideia foi deixar uma classe com todas as Receitas mesmo?
- Pq a visibilidade é default e não private?
| private int id; | ||
| private String nome; | ||
| Receitas receita; | ||
| private double preco; |
There was a problem hiding this comment.
legal usar a classe BigDecimal do Java para valores que precisam de precisão decimal, como monetários
| private String nome; | ||
| Receitas receita; | ||
| private double preco; | ||
| private static ArrayList<Bebida> menu = new ArrayList<Bebida>(); |
There was a problem hiding this comment.
Pq a bebida tem um Menu? Consegue pensar em outra classe que representaria melhor essa relação tem um menu?
| public static void main(String[] args) { | ||
| Scanner cafeScanner = new Scanner(System.in); | ||
| Bebida BebidasMenu = new Bebida(); | ||
| ReservatorioDeAgua reservaDeAguaAtual = new ReservatorioDeAgua(); |
There was a problem hiding this comment.
O reservatório de água não é uma propriedade (atributo) da MaquinaDeCafe?
|
|
||
| private static void Inicializacao(Scanner cafeScanner, int AtualQuantidadeDeAgua, Bebida BebidasMenu) { | ||
|
|
||
| String msgReservatorioDeAgua = AtualQuantidadeDeAgua > 50? "suficiente para " + (AtualQuantidadeDeAgua /50) + " bebidas" : "vazios, favor repor"; |
There was a problem hiding this comment.
( AtualQuantidadeDeAgua > 50 ) essa condição se repete no código, poderia extrair para uma variável, assim se o reservatório de água mudar de tamanho, você só precisará alterar em um lugar
|
|
||
| if(AtualQuantidadeDeAgua > 50){ | ||
| for (int i = 0; i < BebidasMenu.getMenu().size(); i++) { | ||
| System.out.println(BebidasMenu.getMenu().get(i).getId() + " " + BebidasMenu.getMenu().get(i).getNome() + ", preço: " + (BebidasMenu.getMenu().get(i).getPreco() == 0? "grátis" : moedaEmReais(BebidasMenu.getMenu().get(i).getPreco()))); |
There was a problem hiding this comment.
Como vc acessa BebidasMenu.getMenu().get(i) várias vezes, poderia extrair para uma variável
|
|
||
| private static String moedaEmReais(double valor) { | ||
| BigDecimal b = new BigDecimal(valor); | ||
| return "R$ " + b.setScale(2, RoundingMode.HALF_EVEN); |
| @@ -0,0 +1,51 @@ | |||
| package cafes; | |||
|
|
|||
| public class Receitas { | |||
There was a problem hiding this comment.
A classe deve representar uma unidade de negócio
| } | ||
|
|
||
| public static ArrayList<Acucar> getNiveisDeAcucar(){ | ||
| ArrayList<Acucar> Niveis = new ArrayList<Acucar>(); |
There was a problem hiding this comment.
Aqui vc tbm pode usar a interface List como retorno, assim se amanhã vc precisar mudar a implementação de ArrayList para outro tipo de List, só precisará mudar em um lugar
| private int id; | ||
| private String nome; | ||
| Receitas receita; | ||
| Receita receita; |
|
|
||
| } | ||
|
|
||
| private static void Inicializacao(Scanner cafeScanner, ReservatorioDeAgua reservaDeAguaAtual, Bebida BebidasMenu){ |
There was a problem hiding this comment.
A convenção para nomear métodos e seus parâmetros é camelCase
| } | ||
|
|
||
| private static void Inicializacao(Scanner cafeScanner, ReservatorioDeAgua reservaDeAguaAtual, Bebida BebidasMenu){ | ||
| String msgReservatorioDeAgua = reservaDeAguaAtual.getQuantidadeDeAguaNoReservatorio() >= 50? "suficiente para " + (reservaDeAguaAtual.getQuantidadeDeAguaNoReservatorio() /50) + " bebidas." : "vazios."; |
There was a problem hiding this comment.
Quando a linha fica muito grande é legal quebrar, nesse caso poderia quebrar antes do "?" e do ":", por exemplo
|
|
||
| System.out.println("-----Seja bem-vindo a máquina de café 2021!-----"); | ||
| System.out.println("Atenção: essa máquina não devolve troco."); | ||
| System.out.println("Para sair, digite 'sair' a qualquer momento."); |
There was a problem hiding this comment.
a qualquer momento mesmo?
|
|
||
| if(precoBebidaEscolhida == 0){ | ||
| System.out.println("A bebida será de graça."); | ||
| BebidasMenu.getMenu().get(Integer.parseInt(bebidaEscolhida)).receita.Processo(Acucar.Nivel0, reservaDeAguaAtual); |
There was a problem hiding this comment.
Essa sentença BebidasMenu.getMenu().get(Integer.parseInt(bebidaEscolhida)) se repete bastante, é legal extrair para uma variável/constante
| metodoDePagamentoEscolhido = getScanner(cafeScanner, "Digite 1 para pagamento em dinheiro e 2 para pagamento em cartão de débito."); | ||
| } while(metodoDePagamento(metodoDePagamentoEscolhido) == -1); | ||
|
|
||
| if(String.valueOf(metodoDePagamentoEscolhido).equals("1")){ |
There was a problem hiding this comment.
- A variável
metodoDePagamentoEscolhidojá é uma String, pq precisou do String.valueOf? - Quando vc está comparando uma variável do código com uma constante, nesse caso "1", inverte a condição para "1".equals(metodoDePagamentoEscolhido), dessa forma nunca acontecerá um NullPointerException.
- "1" representa o que? Isso é conhecido como número mágico, pois não dá pra saber o que é só de olhar aqui. Uma ideia é extrair para uma constante, outra é ter um Enum de métodos de pagamento e usá-lo aqui
| String sugestaoMoeda = ""; | ||
| do { | ||
| sugestaoMoeda = getScanner(cafeScanner, "Digite 1 ou 2 para aceitar a sugestão ou 3 para adicionar qualquer nota ou moeda. Atenção: essa máquina não devolve troco."); | ||
| } while(aceitarSugestaoMoeda(sugestaoMoeda) == -1); |
There was a problem hiding this comment.
O nome do método aceitarSugestaoMoeda sugere que ele retorna um boolean, aceita ou não aceita (true/false)
|
|
||
| System.out.println("--Favor escolher um nível de açúcar para sua bebida--"); | ||
|
|
||
| for (int i = 0; i < Acucar.getNiveisDeAcucar().size() ; i++) { |
| return SugestaoDeNotasEMoedas; | ||
| } | ||
|
|
||
| private static NotasEMoedas CalcularSugestoes(double Preco, NotasEMoedas NotasEMoedasReais, boolean SegundaSugestao){ |
No description provided.