1
resposta

[Sugestão] Sugestão de resolução usando switch case no menu com frases mais completas.

Principal.java :

package br.com.compras.principal;

import br.com.compras.calculos.Cartao;
import br.com.compras.calculos.Compra;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {

        Scanner leitura = new Scanner(System.in);
        System.out.println( "Definir o limite do cartão de crédito");
        double limiteCartao = leitura.nextDouble();
        Cartao cartao = new Cartao(limiteCartao);

        int option = 0;


        String menu = """
                ** Escolha uma opção ** 
      
                1 - Realizar compras
                2 - Encerrar operações
                """;


        while (option != 2) {

            System.out.println(menu);
            option = leitura.nextInt();

            if (option > 2 || option <= 0) {
                System.out.println("Opção inválida. Tente novamente");
            } else {
                switch (option) {
                    case 1:
                        System.out.println("Digite o produto que deseja comprar.");
                        String produto = leitura.next();

                        System.out.println("Digite o valor do produto.");
                        double valor = leitura.nextDouble();

                        Compra compra = new Compra (produto, valor);

                        boolean compraFeita = cartao.realizaCompra(compra);

                        if (compraFeita) {
                            System.out.println("Compra realizada com sucesso!");
                        } else {
                            System.out.println("Falha ao realizar compra.\n Ultrapassou o limite do seu cartão de crédito ");
                        }
                        break;
                    case 2 :
                        System.out.println("\n***************\n");
                        System.out.println("Compras realizadas :");
                        Collections.sort(cartao.getCompras());
                        for (Compra c: cartao.getCompras()) {
                            System.out.println(c.getProduto() + " -> R$" + c.getValor());
                        }
                        System.out.println("\n***************\n");
                        System.out.println("Saldo restante no cartão de crédito para atingir seu limite:\n R$" + cartao.getSaldo());

                }
            }
        }
    }
}

Cartao.java:

package br.com.compras.calculos;

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


public class Cartao {
    private double limiteCartao;
    private double saldo;
    private List<Compra> compras;

    public Cartao(double limiteCartao) {
        this.limiteCartao = limiteCartao;
        this.saldo = limiteCartao;
        this.compras = new ArrayList<>();
    }

    public boolean realizaCompra(Compra compra) {
        if (this.saldo > compra.getValor()) {
            this.saldo -= compra.getValor();
            this.compras.add(compra);
            return true;
        }

        return false;
    }

    public double getLimiteCartao() {
        return limiteCartao;
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Compra> getCompras() {
        return compras;
    }
}

Compra.java

package br.com.compras.calculos;

public class Compra implements Comparable<Compra>{
    private String produto;
    private double valor;

    public Compra(String descricao, double valor) {
        this.produto = descricao;
        this.valor = valor;
    }

    public String getProduto() {
        return produto;
    }

    public double getValor() {
        return valor;
    }

    @Override
    public String toString() {
        return "Compra: Produtos: '" + produto + "'" +
                "Valor = R$" + valor ;
    }


    public int compareTo(Compra outraCompra) {
        return Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor));
    }
}

A maior diferença em relação ao código fornecido no curso está na forma do menu. O restante está bem parecido. Espero ter ajudado, obrigado!

1 resposta

Olá, Leonardo.

Tudo bem?

Muito obrigado por compartilhar sua sugestão! Seu código está bem estruturado e claro. A utilização do switch case no menu tornou o fluxo do programa mais legível e organizado. Parabéns. Issso mostra que está de fato praticando e evoluindo.

Qualquer dúvida manda aqui. Bons estudos.