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 Aplicação de Compras

Olá, tudo bem?

Segue a minha resolução do desafio proposto abaixo.

public class Product  {
    private String description;
    private double value;


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

    public String getDescription() {
        return description;
    }

    public double getValue() {
        return value;
    }
    
        @Override
    public int compareTo(Product anotherValue) {
        return Double.valueOf(this.value).compareTo(Double.valueOf(anotherValue.value));
    }
}

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Product> products = new ArrayList<>();
        boolean option = true;

        System.out.println("Digite o limite do cartão: ");
        double limit = scanner.nextDouble();
        scanner.nextLine();

        while (option) {
            System.out.println("Digite a descricao da compra: ");
            String description = scanner.nextLine();

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

            var product = new Product(description, value);

            if (value > limit) {
                System.out.println("SALDO INSUFICIENTE!");
                option = false;
            } else {
                limit -= value;
                System.out.println("Compra realizada!");
                products.add(product);

                boolean result = true;
                while (result) {
                    System.out.println("Digite 0 para sair ou 1 para continuar.");
                    int digit = scanner.nextInt();
                    scanner.nextLine();

                    switch (digit) {
                        case 0:
                            option = false;
                            result = false;
                            break;
                        case 1:
                            result = false;
                            break;
                        default:
                            System.out.println("Opção inválida.");
                            break;
                    }
                }
            }
        }

        System.out.println("***************************");
        System.out.println("COMPRAS REALIZADAS: ");
        for (Product product : prodocuts) {
            System.out.println(product.getDescription() + " - R$" + product.getValue());
        }
        System.out.println("Saldo do cartão: " + limit);
        System.out.println("***************************");
    }
}

Percebi que eu tinha esquecido de fazer a ordenação pelos valores, ao ver o vídeo da resolução eu ajustei meu código, criando a classe CreditCard com o método de lançar uma compra e na classe do produto fiz um método para comparar implementando na classe o Comparable

1 resposta

Olá, Enzo! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a criação de classes em Java para estruturar os produtos, utilizou muito bem a lista dinâmica com ArrayList para armazenar as compras e ainda compreendeu a importância da estrutura de repetição com while para controlar o fluxo de interação com o usuário.

Uma dica interessante para o futuro é aplicar formatação monetária ao valor das compras, deixando a saída mais profissional. Assim:

import java.text.NumberFormat;
import java.util.Locale;

// Dentro do loop de impressão:
NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
for (Product product : products) {
    System.out.println(product.getDescription() + " - " + formatoMoeda.format(product.getValue()));
}
System.out.println("Saldo do cartão: " + formatoMoeda.format(limit));

Isso faz com que os valores apareçam no formato brasileiro de moeda, por exemplo: R$ 86,00.

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

  • Adicionar validação de entrada: garantir que o usuário não insira valores negativos.
  • Explorar coleções mais avançadas: como HashMap para associar categorias às compras.
  • Encapsular lógica em métodos: separar a parte de compra, saldo e exibição para deixar o código mais organizado.

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

Ah, uma pergunta: você acha mais interessante evoluir este projeto adicionando validações para entradas incorretas ou aplicar formatação monetária para deixar a saída mais profissional?

Abraço e bons estudos!

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