Machine vending em Java

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! :grin::grin::grin:

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--;
    }
}

Obrigada pessoal

1 curtida