1
resposta

[Projeto] Demonstração de código

Olá, finalizei o projeto desse curso e fiz a aplicação de maneira diferente, queria saber se tem algo que eu poderia melhorar, ou se acabei quebrando alguma "regrinha" de boas práticas, vou mandar as 3 classes aqui.
Fiz tudo do meu jeito e depois de pronto vi as dicas de como implementar algumas coisas e fui atualizando o código, mas mantive a estrutura que havia feito.
Classe cartão

package br.com.atividade.modelo;

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

public class CartaoCredito {
    private  double limite;
    private double saldo;
    private List<Produto> extrato;
    private double gastoTotal;

    public double calcularGasto(){
        return gastoTotal = (limite - saldo);
    }

    public CartaoCredito(double limite){
        this.limite = limite;
        this.saldo = limite;
        this.extrato = new ArrayList<>();
    }

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Produto> getExtrato() {
        return extrato;
    }

    public void adicionarProduto(Produto produto){
        this.extrato.add(produto);
    }

    public boolean passarCartao(Produto produto){
        if (produto.getPreco() < getSaldo()){
            this.saldo -= produto.getPreco();
            this.extrato.add(produto);
            System.out.printf("Compra de %s no valor de %.2f aprovada.\n",produto.getNome(),produto.getPreco());
            System.out.printf("Saldo atual do cartão: %.2f\n",this.getSaldo());
            return true;
        } else {
            System.out.printf("Saldo insuficiente para compra.\n");
            System.out.printf("Redirecionando para Checklist...\n");
            return false;
        }
    }

    public void getCheckList(){
        System.out.printf("""
                ******************************************
                           CheckList de compras
                ******************************************
                """);
        System.out.printf("O total de itens comprados foi: " + this.extrato.size() + "\n");
        for (Produto item : this.getExtrato() ) {
            System.out.println(item);
        }
        System.out.printf("\n");
        System.out.printf("O total a ser descontado na proxima fatura é de: " + this.calcularGasto() + "\n");
        System.out.printf("O limite disponível do cartão está em: %.2f\n", this.getSaldo());
        System.out.printf("******************************************");
    }
}

Classe Produto

package br.com.atividade.modelo;

public class Produto implements Comparable<Produto>{
    private String nome;
    private double preco;

    public String getNome() {
        return nome;
    }

    public double getPreco() {
        return preco;
    }

    public Produto(String nome, double preco) {
        this.nome = nome;
        this.preco = preco;
    }

    @Override
    public String toString() {
        return this.nome + " -- " + "R$ " + this.preco;
    }

    @Override
    public int compareTo(Produto o) {
        return Double.valueOf(this.getPreco()).compareTo(Double.valueOf(o.getPreco()));
    }
}

Classe Main

package br.com.atividade.main;

import br.com.atividade.modelo.CartaoCredito;
import br.com.atividade.modelo.Produto;

import java.util.*;

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

        Scanner scanner = new Scanner(System.in);

        System.out.printf("Digite o limite do cartão de credito:\n");
        double limite = scanner.nextDouble();
        scanner.nextLine();

        var cartao = new CartaoCredito(limite);

        int resposta = 1;

        while (resposta != 0) {
            System.out.printf("digite a descricao da compra: \n");
            String nome = scanner.nextLine();

            System.out.printf("digite o valor da compra: \n");
            double valor = scanner.nextDouble();

            var produto = new Produto(nome, valor);
            if (cartao.passarCartao(produto)) {
                System.out.printf("""
                        \nQuer adicionar fazer mais alguma compra?
                        (qualquer numero) - sim
                        0 - ir para o checklist
                        """);
                resposta = scanner.nextInt();
                scanner.nextLine();
            } else {
                break;
            }
        }
        cartao.getExtrato().sort(Comparator.comparing(Produto::getPreco).reversed());
        cartao.getCheckList();



    }
}

1 resposta

Oi, Dalton! Como vai?

Agradeço por compartilhar seu código.

Gostei de como você estruturou a classe CartaoCredito e fez o uso de List<Produto> para armazenar o extrato. Também foi interessante a forma como organizou a lógica de compra dentro do método passarCartao, garantindo feedback direto ao usuário no console.

Se quiser testar algo no futuro pode usar Collections.sort ou Comparator para simplificar a ordenação de listas.


import java.util.*;

public class ExemploOrdenacao {
    public static void main(String[] args) {
        List<String> nomes = Arrays.asList("Maria", "Joao", "Ana");
        Collections.sort(nomes);
        System.out.println(nomes);
    }
}

Esse codigo ordena uma lista de nomes em ordem alfabetica, facilitando a manipulacao de dados em coleções.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!