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

Desafio: Compras

Queria deixar aqui meu exemplo de como resolvi o desafio:
Classe Cartão

package br.com.alura.screenmatch.desafios.interfaces.compras;

public class Cartão implements Payment {
    private double limit;

    public Cartão(double limit) {
        this.limit = limit;
    }

    @Override
    public void discount(double value) {
        if (limit >= value) {
            limit -= value;
        } else {
            System.out.println("Limite insuficiente");
        }
    }

    public double getLimit() {
        return limit;
    }
}

Classe Compra

package br.com.alura.screenmatch.desafios.interfaces.compras;

public class Compra implements Comparable<Compra> {
    private String description;
    private double value;

    public Compra(String description, double value) {
        this.description = description;
        this.value = value;
    }

    public String getDescription() {
        return description;
    }

    public double getValue() {
        return value;
    }

    @Override
    public int compareTo(Compra outraCompra) {
        return Double.compare(this.value, outraCompra.value);
    }

    @Override
    public String toString() {
        return description + " - R$ " + value;
    }
}

Main

package br.com.alura.screenmatch.desafios.interfaces.compras;

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.print("Digite o limite do cartão: ");
        double limite = scanner.nextDouble();

        Cartão cartao = new Cartão(limite);

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

        boolean continuar = true;

        while (continuar) {

            System.out.print("Digite o nome da compra: ");
            scanner.nextLine();
            String descricao = scanner.nextLine();

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

            if (valor > cartao.getLimit()) {
                System.out.println("Limite insuficiente!");
                break;
            }

            Compra compra = new Compra(descricao, valor);

            compras.add(compra);

            cartao.discount(valor);

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

            System.out.print("Deseja realizar outra compra? (1 - Sim / 0 - Não): ");
            int resposta = scanner.nextInt();

            if (resposta == 0) {
                continuar = false;
            }
        }

        Collections.sort(compras);

        System.out.println("\nCOMPRAS REALIZADAS:");

        for (Compra compra : compras) {
            System.out.println(compra);
        }

        System.out.println("\nLimite restante: R$ " + cartao.getLimit());

        scanner.close();
    }
}
1 resposta

Oii Matheus, tudo bem?

Obrigada por compartilhar sua solução no fórum, com certeza vai ajudar outros alunos que estiverem trabalhando no mesmo desafio!

Sua implementação está bem estruturada. Alguns pontos que se destacam: você usou Comparable<Compra> com Double.compare para ordenar as compras pelo valor (uma escolha bem mais robusta do que subtrair os doubles diretamente), e separou bem as responsabilidades entre as classes.

Uma observação pequena: o nome da classe Cartão usa caractere com acento. Isso funciona em Java, mas a convenção geral é evitar acentos em nomes de classes e variáveis para garantir compatibilidade entre diferentes sistemas operacionais e codificações de arquivo. Algo como Cartao ou CreditCard seria mais seguro a longo prazo.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

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