Machine vending em Java

5 respostas
javaprogramação
J

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

5 Respostas

J
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 + "]";
	}
	
}
R

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:

G

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.

S

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

Obrigada pessoal

Criado 4 de fevereiro de 2021
Ultima resposta 4 de fev. de 2021
Respostas 5
Participantes 4