Oi pessoas, já fiz tantas perguntas aqui que estou até com vergonha rs
Estou participando de um desafio para criar uma vending machine, estou utilizando Java, no meu projeto eu criei três classes:
-Main
-Produto
-Pagamento
Tem algumas regrinhas para seguir, mas empaquei em uma parte.
Não estou conseguindo relacionar o produto com a numeração, tentei usar arrayList, mas não está dando certo quando o usuário digita e tenho prazo até amanhã.
Vou colocar o código daqui a pouco, porque no momento estou digitando pelo celular.
Mas, por favor, alguém me ajudaa
Bre
package vendingMachine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner (System.in);
System.out.println("------------------------------------------ ");
System.out.println(" Bem-vindo a Drinks Machine! ");
System.out.println("------------------------------------------- ");
System.out.println(" ");
System.out.println(" Bebidas disponíveis: ");
System.out.println(" ");
System.out.println(" 1. Refrigerente variados Preço: R$4,00");
System.out.println(" 2. Sucos Preço: R$3,00");
System.out.println(" 3. Chá Preço: R$3,00");
System.out.println(" 4. Água Preço: R$2,00");
System.out.println(" ");
Produto p1 = new Produto(1, 4, 10);
Produto p2 = new Produto(2, 4, 10);
Produto p3 = new Produto(3, 4, 10);
Produto p4 = new Produto(4, 4, 10);
List<Produto> produtos = new ArrayList<>();
produtos.add(p1);
produtos.add(p2);
produtos.add(p3);
produtos.add(p4);
Produto prod = new Produto();
System.out.print("Selecione sua bebida: ");
int numSelecionado = sc.nextInt();
// for(Produto p : produtos) {
// produtos.stream().filter(produto -> p.getPosicao()== numSelecionado);
// }
Pagamento pag = new Pagamento();
System.out.print("Informe o valor depositado R$:" );
pag.conferirPag();
System.out.println("Seu troco é " + troco);
//pag.conferirPag();
}
}
package vendingMachine;
public class Pagamento {
public int valorPago;
public int valorFaltante;
public int troco;
Produto produto = new Produto();
public void conferirPag () {
if (produto.getValor() < valorPago) {
troco = valorPago - produto.getValor();
System.out.print("Troco: R$" + troco);
}
else if (produto.getValor() > valorPago) {
valorFaltante = produto.getValor() - valorPago;
System.out.print("Para finalizar a compra falta: R$: " + valorFaltante);
}
else {
System.out.println("Aproveite sua bebida!");
}
}
}
package vendingMachine;
public class Produto {
private int posicao;
private int valor;
private int qntEstoque;
public Produto(int posicao, int valor, int qntEstoque) {
this.posicao = posicao;
this.valor = valor;
this.qntEstoque = qntEstoque;
}
public Produto() {
}
public int getPosicao() {
return posicao;
}
public int getValor() {
return valor;
}
public int getQntEstoque() {
return qntEstoque;
}
public void conferirQtdEstoque(){
if(this.qntEstoque > 1){
this.qntEstoque-= 1;
System.out.println("Obrigada por comprar conosco! Aproveite sua bebida :)");
}
else{
System.out.println("Quantidade requerida indisponivel no estoque");
}
}
public void selecaoProduto(int numSelecionado) {
this.posicao = numSelecionado;
}
@Override
public String toString() {
return "Produto [posicao=" + posicao + ", valor=" + valor + ", qntEstoque=" + qntEstoque + "]";
}
}
Boa noite Juliana, não há problema nenhum em você fazer várias perguntas, o fórum está aqui para isso mesmo.
Só vou pedir pra vc não criar tópicos com nomes repetidos, se vc ver que o assunto pode ser tratado no mesmo tópico, não há necessidade de criar um novo. E se alguém te ajudar com alguma resposta, é legal dar um feedback, nem que seja um obrigado, só pra pessoa (ou pessoas que precisarem da mesma coisa) saber se vc conseguiu resolver o problema
Seja bem vindo ao Fórum!
1 curtida
Nesse caso se fosse eu, eu usaria um HashMap ao inves de ArrayList então ficaria assim:
HashMap<Integer, Produto>
Sendo esse Integer o número da sua posição. Tendo o HashMap você pode pegar o Produto na posição X q você informar.
Existem N formas de implementar, segue um exemplo:
Classe Main
:
package vendingMachine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static final Scanner in = new Scanner(System.in);
public static void main(String[] args) {
Main vendingMachine = new Main();
vendingMachine.executar();
}
private List<Produto> produtos;
public Main() {
produtos = new ArrayList<>();
produtos.add(new Produto("Refrigerente variados", 4.5, 10));
produtos.add(new Produto("Sucos", 3.75, 10));
produtos.add(new Produto("Chá", 4, 10));
produtos.add(new Produto("Água", 3, 10));
}
public void executar() {
while (true) {
Produto produto = escolherProduto();
System.out.print("Informe o valor depositado R$: ");
double valorPago = Double.parseDouble(in.nextLine());
Pagamento pagamento = new Pagamento(produto);
if (pagamento.efetuar(valorPago)) {
produto.vender();
}
}
}
private Produto escolherProduto() {
Produto produtoSelecionado = null;
do {
System.out.println("------------------------------------------ ");
System.out.println(" Bem-vindo a Drinks Machine! ");
System.out.println("------------------------------------------- ");
System.out.println(" ");
System.out.println(" Produtos disponíveis: ");
System.out.println(" ");
int posicao = 0;
for (Produto produto : produtos) {
posicao++;
System.out.printf(" %d. %s Preço: R$ %.2f%n", posicao, produto.getDescricao(), produto.getValor());
}
System.out.println();
System.out.print("Selecione seu produto: ");
int selecionado = Integer.parseInt(in.nextLine()) - 1;
produtoSelecionado = produtos.get(selecionado);
if (produtoSelecionado.getEstoque() > 0) {
break;
}
System.out.println("Não há mais \"" + produtoSelecionado.getDescricao() + "\" em estoque!");
} while (produtoSelecionado.getEstoque() < 1);
return produtoSelecionado;
}
}
Classe Pagamento
:
package vendingMachine;
public class Pagamento {
private Produto produto;
public Pagamento(Produto produto) {
this.produto = produto;
}
public boolean efetuar(double valorPago) {
double valorProduto = produto.getValor();
if (valorProduto > valorPago) {
double valorFaltante = valorProduto - valorPago;
System.out.printf("Para finalizar a compra falta: R$ %.2f%n", valorFaltante);
return false;
}
if (valorProduto < valorPago) {
double troco = valorPago - valorProduto;
System.out.printf("Troco: R$ %.2f%n", troco);
}
System.out.println("Aproveite seu \"" + produto.getDescricao() + "\"");
System.out.println();
return true;
}
}
Classe Produto
:
package vendingMachine;
public class Produto {
private String descricao;
private double valor;
private int estoque;
public Produto(String descricao, double valor, int estoque) {
super();
this.descricao = descricao;
this.valor = valor;
this.estoque = estoque;
}
public String getDescricao() {
return descricao;
}
public double getValor() {
return valor;
}
public int getEstoque() {
return estoque;
}
public void vender() {
estoque--;
}
}