Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio atualizado #4

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions DesafioMaquinaDeCafe.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
85 changes: 0 additions & 85 deletions README.md

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
15 changes: 15 additions & 0 deletions src/cafes/Acucar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package cafes;

public enum Acucar {
Nivel0("nenhuma"),Nivel1("pouquíssima"),Nivel2("pouca"),Nivel3("normal"),Nivel4("muito"),Nivel5("bastante");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


private String quantidadeDeAcucar;

private Acucar(String quantidade){
this.quantidadeDeAcucar = quantidade;
}

public String getQuantidadeDeAcucar() {
return this.quantidadeDeAcucar;
}
}
38 changes: 38 additions & 0 deletions src/cafes/Bebida.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cafes;
import java.util.ArrayList;

public class Bebida {
private int id;
private String nome;
Receitas receita;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 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 double preco;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

legal usar a classe BigDecimal do Java para valores que precisam de precisão decimal, como monetários

private static ArrayList<Bebida> menu = new ArrayList<Bebida>();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pq a bebida tem um Menu? Consegue pensar em outra classe que representaria melhor essa relação tem um menu?


public Bebida(){

}

public Bebida(int id, String nome, Receitas receita, double preco) {
this.id = id;
this.nome = nome;
this.receita = receita;
this.preco = preco;
Bebida.menu.add(this);
}

public static ArrayList<Bebida> getMenu() {
return menu;
}

public String getNome() {
return nome;
}

public int getId() {
return id;
}

public double getPreco() {
return preco;
}
}
98 changes: 98 additions & 0 deletions src/cafes/MaquinaDeCafe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package cafes;

import java.util.Scanner;
import java.math.*;

public class MaquinaDeCafe {

public static void main(String[] args) {
Scanner cafeScanner = new Scanner(System.in);
Bebida BebidasMenu = new Bebida();
ReservatorioDeAgua reservaDeAguaAtual = new ReservatorioDeAgua();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O reservatório de água não é uma propriedade (atributo) da MaquinaDeCafe?


Receitas ReceitaDeCafe = new Receitas (true, true);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ao invés de ter uma classe Receitas com todas as receitas, poderia ter especializado cada classe com as suas propriedades, as receitas de cada bebida tem características diferentes e similares

ReceitaDeCafe.setQuantidadeDePoCafe(10);

Receitas ReceitaDeCafeComLeite = new Receitas (true, true);
ReceitaDeCafeComLeite.setQuantidadeDePoCafe(5);
ReceitaDeCafeComLeite.setQuantidadeDeLeite(10);

Receitas ReceitaDeCappuccino = new Receitas (true, true);
ReceitaDeCappuccino.setQuantidadeDePoCafe(5);
ReceitaDeCappuccino.setQuantidadeDeLeite(5);
ReceitaDeCappuccino.setQuantidadeDeChocolate(5);

Receitas ReceitaDeChaDeLimao = new Receitas (true, true);
ReceitaDeChaDeLimao.setQuantidadeDeLimao(10);

Receitas ReceitaDeAguaQuente = new Receitas(true, false);

Bebida Cafe = new Bebida(0,"Café",ReceitaDeCafe, 0.50);
Bebida CafeComLeite = new Bebida(1,"Café com leite", ReceitaDeCafeComLeite, 1.00);
Bebida Capuccino = new Bebida(2,"Capuccino",ReceitaDeCappuccino,1.50);
Bebida ChaDeLimao = new Bebida(3,"Chá de limão", ReceitaDeChaDeLimao, 1.00);
Bebida AguaQuente = new Bebida(4, "Água Quente", ReceitaDeAguaQuente, 0.00);

if(reservaDeAguaAtual.getQuantidadeDeAguaNoReservatorio() > 50){
Inicializacao(cafeScanner, reservaDeAguaAtual.getQuantidadeDeAguaNoReservatorio(), BebidasMenu);
} else {
String keyRepor = "repor";
String repor = "";
do
{
repor = getScanner(cafeScanner, "Por favor, digite 'repor' para repor quantidade de água");
} while(!keyRepor.equals(repor.toLowerCase()));

reservaDeAguaAtual.reporQuantidadeDeAguaNoReservatorio();
System.out.println("Reservatório de água completo!");
Inicializacao(cafeScanner, reservaDeAguaAtual.getQuantidadeDeAguaNoReservatorio(), BebidasMenu);
}


}

private static void Inicializacao(Scanner cafeScanner, int AtualQuantidadeDeAgua, Bebida BebidasMenu) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uma convenção de nomenclatura para métodos, sempre em camelCase começando pela primeira letra minúscula e a primeira maiúscula para a(s) palavra(s) consecutiva(s)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesmo caso para os parâmetros


String msgReservatorioDeAgua = AtualQuantidadeDeAgua > 50? "suficiente para " + (AtualQuantidadeDeAgua /50) + " bebidas" : "vazios, favor repor";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

( 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


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("Reservatórios de água " + msgReservatorioDeAgua);

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())));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Como vc acessa BebidasMenu.getMenu().get(i) várias vezes, poderia extrair para uma variável

}

String bebidaEscolhida = "";
do {
bebidaEscolhida = getScanner(cafeScanner, "Digite o número da bebida escolhida");
} while(bebidaEncontrada(bebidaEscolhida, BebidasMenu) == -1);

System.out.println("A bebida escolhida foi " + BebidasMenu.getMenu().get(Integer.parseInt(bebidaEscolhida)).getNome());

}
}

private static int bebidaEncontrada(String bebidaEscolhida, Bebida BebidasMenu){
for(int i = 0; i < BebidasMenu.getMenu().size(); i++){
int IDdasBebidasDoMenu = BebidasMenu.getMenu().get(i).getId();
if(String.valueOf(IDdasBebidasDoMenu).equals(bebidaEscolhida)){
return IDdasBebidasDoMenu;
}
}

return -1;
}

private static String moedaEmReais(double valor) {
BigDecimal b = new BigDecimal(valor);
return "R$ " + b.setScale(2, RoundingMode.HALF_EVEN);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

}

private static String getScanner(Scanner cafeScanner, String mensagem) {
System.out.println(mensagem);
String entry = cafeScanner.nextLine();
return entry;
}
}
4 changes: 4 additions & 0 deletions src/cafes/Pagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package cafes;

public class Pagamento {
}
51 changes: 51 additions & 0 deletions src/cafes/Receitas.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package cafes;

public class Receitas {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A classe deve representar uma unidade de negócio

private int quantidadeDeAgua;
private int quantidadeDePoCafe;
private int quantidadeDeLeite;
private int quantidadeDeChocolate;
private int quantidadeDeLimao;
private boolean ferverAgua;
private boolean filtro;

public Receitas(boolean ferverAgua, boolean filtro) {
this.quantidadeDeAgua = 50;
this.ferverAgua = ferverAgua;
this.filtro = filtro;
}

public int getQuantidadeDePoCafe() {
return quantidadeDePoCafe;
}

public void setQuantidadeDePoCafe(int quantidadeDePoCafe) {
this.quantidadeDePoCafe = quantidadeDePoCafe;
}

public int getQuantidadeDeLeite() {
return quantidadeDeLeite;
}

public void setQuantidadeDeLeite(int quantidadeDeLeite) {
this.quantidadeDeLeite = quantidadeDeLeite;
}

public int getQuantidadeDeChocolate() {
return quantidadeDeChocolate;
}

public void setQuantidadeDeChocolate(int quantidadeDeChocolate) {
this.quantidadeDeChocolate = quantidadeDeChocolate;
}

public int getQuantidadeDeLimao() {
return quantidadeDeLimao;
}

public void setQuantidadeDeLimao(int quantidadeDeLimao) {
this.quantidadeDeLimao = quantidadeDeLimao;
}

//metodo de processo da receita
}
17 changes: 17 additions & 0 deletions src/cafes/ReservatorioDeAgua.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package cafes;

public class ReservatorioDeAgua {
private int QuantidadeDeAguaNoReservatorio = 1000;

public int getQuantidadeDeAguaNoReservatorio() {
return QuantidadeDeAguaNoReservatorio;
}

public void atualizarNiveisDeAgua(int quantidadeDeAguaUtilizada) {
QuantidadeDeAguaNoReservatorio = QuantidadeDeAguaNoReservatorio - quantidadeDeAguaUtilizada;
}

public void reporQuantidadeDeAguaNoReservatorio() {
QuantidadeDeAguaNoReservatorio = 1000;
}
}