1
resposta

[Projeto] Minha solução para o desafio

package br.com.alura;

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Defina o limite do seu cartão:");
        double saldo = Double.parseDouble(scanner.nextLine());

        List<Compra> listaCompras = new ArrayList<>();
        int opcao = 0;

        while (opcao != 4) {
            System.out.println("""
                Digite a sua opção:
                1 - Nova compra
                2 - Exibir compras realizadas
                3 - Saldo atual do cartão
                4 - Sair
            """);
            opcao = Integer.parseInt(scanner.nextLine());

            switch (opcao) {
                case 1: {
                    System.out.println("Informe o produto:");
                    String desc = scanner.nextLine();

                    System.out.println("Informe o valor do produto:");
                    double valor = Double.parseDouble(scanner.nextLine());

                    if (valor <= saldo) {
                        Compra c = new Compra();
                        c.setDescricao(desc);
                        c.setValor(valor);
                        listaCompras.add(c);
                        saldo -= valor;
                        System.out.println("Compra realizada com sucesso!");
                    } else {
                        System.out.println("Saldo insuficiente!");
                    }
                    break;
                }
                case 2: {
                    // Ordena as compras por valor usando Comparable
                    Collections.sort(listaCompras);

                    System.out.println("=== Compras realizadas (ordenadas por valor) ===");
                    for (Compra c : listaCompras) {
                        System.out.println(c);
                    }
                    break;
                }
                case 3: {System.out.printf("Saldo atual: R$ %.2f \n", saldo);
                    break;
                }
                case 4: {System.out.println("Saindo...");
                    break;
                }
                default: {System.out.println("Opção inválida");
                    break;
                }
            }
        }
        scanner.close();
    }
}

package br.com.alura;

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

    public Compra() {
    }

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

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

    public String getDescricao() {
        return descricao;
    }

    public double getValor() {
        return valor;
    }

    @Override
    public int compareTo(Compra outra) {
        return Double.compare(this.valor, outra.valor); // ordena de forma crescente
    }

    @Override
    public String toString() {
        return descricao + " - R$" + valor;
    }
}
1 resposta

Olá, Smalley! Como vai?

Parabéns pela resolução da atividade!

Observei que sua resposta explorou o uso de listas para armazenar as compras, utilizou muito bem o Comparable para ordenar os valores e ainda compreendeu a importância do Scanner para tornar o programa interativo com o usuário.

Uma dica interessante para o futuro é formatar melhor a saída das compras, deixando os valores monetários mais padronizados. Assim:

@Override
public String toString() {
    return String.format("%s - R$ %.2f", descricao, valor);
}

Isso faz com que os valores sejam exibidos com duas casas decimais, facilitando a leitura e tornando a aplicação mais profissional.

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!