Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Análise de Projeto

Gostaria de saber se meu código está bom ou se tem muita coisa a ser melhorada, sei que está diferente do apresentado, mas não sei se isso é MUITO relevante ou se mal interfere. Segue código:

Main

package main;

import Control.Cartao;
import Control.Compra;

import java.util.Scanner;

public class Main {
    public static void main() {

        Scanner leitor = new Scanner(System.in);

        System.out.println("Digite o limite do cartão: ");
        Double limite = leitor.nextDouble();
        leitor.nextLine();
        Cartao cartao = new Cartao(limite);

        Integer opcao = 1;
        while (opcao != 0) {

            System.out.println("Digite a descricao da compra: ");
            String descricao = leitor.nextLine();
            //compra.setDescricao(descricao);

            System.out.println("Digite o valor da compra: ");
            Double valor = leitor.nextDouble();
            //compra.setValor(valor);

            Compra compra = new Compra(descricao, valor);

            cartao.realizarCompra(compra);

            if (cartao.verificarLimite(valor) == true) {
                System.out.println("Compra Realizada!");
                System.out.println("Digite 0 para sair ou 1 para continuar");
                opcao = leitor.nextInt();
                leitor.nextLine();

            } else {
                opcao = 0;
            }
        }
        System.out.println("Programa Encerrado!\n");

        System.out.println("*******************");
        System.out.println("COMPRAS REALIZADAS:");
        cartao.imprimirCompra();
    }
}

Cartao

package Control;

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

public class Cartao {

    private Double limite;
    private Double saldo;

    public Cartao(Double limite) {
        this.limite = limite;
        this.saldo = limite;
    }

    public Double getLimite() {
        return limite;
    }

//    public void setLimite(Double limite) {
//        this.limite = limite;
//    }



    public boolean verificarLimite(Double valor) {
        if (this.limite >= valor) {
            return true;
        } else {
            return false;
        }
    }

    List<Compra> itensCompra = new ArrayList<>();

    public void realizarCompra(Compra compra) {
        if (verificarLimite(compra.getValor()) == true) {

            itensCompra.add(compra);
            this.limite = getLimite() - compra.getValor();
        } else {
            System.out.println("Saldo Insuficiente");
        }
    }

    public void imprimirCompra() {
        itensCompra.sort(Comparator.comparing(Compra::getValor));
        for (Compra item: itensCompra) {
            System.out.println(item.getDescricao() + " - " + item.getValor());
        }
    }

}

Compra

package Control;

public class Compra {

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

    private String descricao;
    private Double valor;

    public String getDescricao() {
        return descricao;
    }

//    public void setDescricao(String descricao) {
//        this.descricao = descricao;
//    }

    public Double getValor() {
        return valor;
    }

//    public void setValor(Double valor) {
//        this.valor = valor;
//    }

}
1 resposta

Olá, Murilo! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a classe Cartao para controlar limite de compras com Java, utilizou muito bem a classe Compra para organizar os dados e ainda compreendeu a importância da estrutura modular para manter o projeto claro e escalável.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Uma dica interessante para o futuro é utilizar switch-case no lugar de múltiplos if-else. Assim:

switch (opcao) {
    case 1:
        System.out.println("\n Seu saldo é " + saldo);
        break;
    case 2:
        // lógica de receber valor
        break;
    case 3:
        // lógica de transferir valor
        break;
    default:
        System.out.println("Opção inválida!");
}

Isso faz o código ficar mais legível e fácil de manter.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Encapsulamento: proteger atributos privados com getters e setters quando necessário.
  • Coleções: aplicar ordenação e filtros para enriquecer relatórios de compras.
  • Scanner: fechar o objeto ao final para evitar vazamento de recursos.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: Você acha que organizar o código em múltiplas classes ajuda mais na clareza para aprendizado ou na escalabilidade para projetos maiores e complexos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!