2
respostas

[Projeto] Minha solução

Código classe principal

package principal;

import armazena.Carteira;
import armazena.Produto;

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Principal {

    public static void main(String[] args) {

        //Criando o scanner para capturar digitos do teclado
        Scanner entrada = new Scanner(System.in);

        //Interações com o usuário
        mostra("Quanto você pode gastar?");
        double valorLimite = entrada.nextDouble();

        //Criando a carteira de compras
        Carteira compra1 = new Carteira(valorLimite);

        //Configurações de compra
        for (int i = 0; i >= 0; i++) {

            //Interações com o usuário
            entrada.nextLine();
            mostra("Digite o nome do produto:");
            String nomeProduto = entrada.nextLine();
            mostra("Digite o valor do produto:");
            double valorProduto = entrada.nextDouble();

            //Criando o produto com seu nome e preço, adicionando ele a uma lista e ordenando a lista
            Produto produto = new Produto(nomeProduto, valorProduto);
            boolean produtoComprado = compra1.adicionaProduto(produto);
            Collections.sort(compra1.getListaDeProduto());

            // OUTRO JEITO DE ORDENAR
            //compra1.getListaDeProduto().sort(Comparator.comparing(Produto::getValor));

            //Interações com o usuário e mostra as informações de compra
            if(produtoComprado) {
                if (compra1.getLimite() > 0) {
                    mostra("Compra realizada com sucesso.");
                    mostra("Seu saldo restante é: " + compra1.getLimite());
                    mostra("""
                Continuar comprando?
                
                1-Sim
                2-Não 
                """);
                    int opcao = entrada.nextInt();

                    if(opcao == 2) {
                        mostra("Muito obrigado por comprar conosco.");
                        mostraLista(compra1);
                        break;
                    }
                }else if (compra1.getLimite() == 0) {
                    mostra("Você não tem mais limite.");
                    mostraLista(compra1);
                    break;
                }
            }else{
                mostra("O valor ultrapassou seu limite.");
                mostra("""
                Quer escolher outro produto?
                
                1-Sim
                2-Não 
                """);
                int opcao = entrada.nextInt();

                if (opcao == 2) {
                    mostra("Muito obrigado por comprar conosco.");
                    mostraLista(compra1);
                    break;

                }else if (opcao == 1){
                }
            }
        }
    }

//Método para mostrar Strings
    private static void mostra(String texto) {
        System.out.println(texto);
    }

//Método para mostrar a lista
    private static void mostraLista(Carteira lista) {

        mostra("Essas são suas compras:");
        mostra("*".repeat(20));

        for (int i = 0; i < lista.getListaDeProduto().size(); i++) {
            mostra(lista.getListaDeProduto().get(i).toString());
        }

        mostra("*".repeat(20));
    }
}

Código classe produto

package armazena;

public class Produto implements Comparable<Produto> {

    //Onde fica armazenado as informações do produto
    private String nome;
    private double valor;

    //Usado para definir as informações do produto no momento de sua criação
    public Produto(String nome, double valor) {
        this.nome = nome;
        this.valor = valor;
    }

    //Método para usar as informações do produto
    public String getNome() {
        return nome;
    }

    public double getValor() {
        return valor;
    }

    //Mudando o formato de exibição do produto
    @Override
    public String toString() {
        return "Produto: " + nome + "\nPreço: " + valor;
    }

    //Como comparar o produto para ordenar em uma lista
    @Override
    public int compareTo(Produto outroProduto) {
        return Double.valueOf(this.valor).compareTo(Double.valueOf(outroProduto.valor));
    }
}
2 respostas

Código classe Carteira

package armazena;

import java.util.ArrayList;
import java.util.List;

public class Carteira {

    //Onde fica armazenado as informações do carteira
    private double limite;
    private List<Produto> listaDeProduto;

    //Usado para definir as informações da carteira no momento da criação e criar uma lista de produtos
    public Carteira(double limite) {
        this.limite = limite;
        this.listaDeProduto = new ArrayList();
    }

    //Método utilizado para adicionar produtos na lista
    public boolean adicionaProduto(Produto produto) {
        if(this.limite >= produto.getValor()) {
            listaDeProduto.add(produto);
            this.limite -= produto.getValor();
            return true;
        }else{
            return false;
        }
    }

    //Métodos para usar as informações da carteira
    public double getLimite() {
        return limite;
    }

    public List<Produto> getListaDeProduto() {
        return listaDeProduto;
    }
}

Oi, Marcelo! Tudo bem?

Parabéns pelo resultado do desafio! Além disso, agradeço por compartilhar sua reposta, tenho certeza que vai ajudar os demais estudantes que estão aprendendo este mesmo conteúdo.

Continue mergulhando em seus estudos e caso tenha dúvidas, conte com o fórum da Alura!

Um forte abraço e bons estudos!