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] Desafio prático

Olá! Assim resolvi o desafio proposto na Aula 5.

import br.com.alura.models.Cartao;
import br.com.alura.models.Compra;

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

public class Main {
    static void main() {
        Scanner input = new Scanner(System.in);

        System.out.print("Digite o limite do seu cartão: ");
        double limite = input.nextDouble();

        var cartao = new Cartao(limite);

        ArrayList<Compra> compras = new ArrayList<>();

        int opcao = 1;

        while(opcao == 1){

            System.out.print("Digite a descrição da sua compra: ");
            input.nextLine();
            String descricao = input.nextLine();

            System.out.print("Digite o valor da compra: ");
            double valorCompra = input.nextDouble();

            if(cartao.utilizarLimite(valorCompra)){

                var compra = new Compra(descricao, valorCompra);
                compras.add(compra);

                System.out.println("Compra realizada!");

            } else{

                System.out.println("Limite insuficiente!");

                System.out.println("*********************");
                Collections.sort(compras);
                System.out.println(compras);
                System.out.println("*********************");

            }

            opcao = -1;
            while(opcao != 1 && opcao != 0) {
                System.out.println("Deseja continuar comprando?\n[1] Sim\n[0] Não");
                opcao = input.nextInt();
            }
        }

    }
}


package br.com.alura.models;

public class Cartao {
    private double limiteTotal;
    private double limiteDisp;

    public Cartao(double limite) {
        this.limiteTotal = limite;
        this.limiteDisp = limite;
    }

    public double getLimiteTotal() {
        return limiteTotal;
    }

    public double getLimiteDisp() {
        return limiteDisp;
    }

    public boolean utilizarLimite(double d){
        boolean value = false;

        if (this.limiteDisp - d >= 0){
            value = true;
            this.limiteDisp -= d;
        }

        return value;
    }
}


package br.com.alura.models;

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

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

    public String getDescricao() {
        return descricao;
    }

    public double getValor() {
        return valor;
    }

    @Override
    public String toString() {
        return this.getDescricao() + ": R$ " + this.getValor();
    }

    @Override
    public int compareTo(Compra c) {
        return this.getDescricao().compareTo(c.getDescricao());
    }
}
1 resposta

Boa noite, Guilherme! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando o ArrayList para armazenar compras com Java, aplicou de maneira eficiente o Collections.sort para ordenar os itens e entendeu como usar o Comparable para definir a lógica de comparação entre objetos.

E um detalhe curioso para aprimorar seria mostrar o saldo disponível após cada compra, deixando o usuário mais consciente do limite restante. Exemplo:

System.out.println("Compra realizada!");
System.out.println("Limite disponível: R$ " + cartao.getLimiteDisp());

Isso faz com que o programa fique mais próximo de um sistema real de cartão de crédito.

Para aprimorar suas soluções, algumas boas práticas são:

  • Encapsulamento: mover a lógica de validação e atualização do limite para dentro da classe Cartao.
  • Feedback claro: informar sempre o saldo restante após cada operação.
  • Flexibilidade: permitir ordenação por valor além da descrição.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

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: o que você gostaria de praticar mais agora, adicionar novas formas de ordenação para as compras ou implementar relatórios mais detalhados do extrato do cartão?

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

Abraço e bons estudos!

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