1
resposta

Solução do desafio

Crédito

package ShoppingApplication.methods;

public class Credit {
    public double limit;

    public Credit(double limit) {
        this.limit = limit;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}

Compras

package ShoppingApplication.methods;

public class Purchases implements Comparable <Purchases> {
    private String product;
    private double price;

    public Purchases(String product, double price) {
        this.product = product;
        this.price = price;
    }

    public String getProduct() {
        return product;
    }

    public void setProduct(String product) {
        this.product = product;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int compareTo(Purchases other){
        return Double.compare(this.price, other.price);
    }

   @Override
    public String toString() {
        return "Produto:" + this.getProduct() + "\nPreço:" + this.getPrice();
    }
}

Main

import ShoppingApplication.methods.Credit;
import ShoppingApplication.methods.Purchases;
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 = getScanner();
        double totalSpent = 0;

        List <Purchases> shoppingList = new ArrayList<>();

        System.out.println("Digite o limite do cartão:");
        var cardLimit = new Credit(scanner.nextDouble());
        scanner.nextLine();

        while (true){
            System.out.println("Digite o produto da compra:");
            String product = scanner.nextLine();
            System.out.println(product);

            System.out.println("Qual o valor do produto?");
            double price = scanner.nextDouble();
            if (price > cardLimit.getLimit()){
                System.out.println("O valor da compra ultrapassa o limite do cartão");
                break;
            }else {
                double newLimit = cardLimit.getLimit() - price;
                cardLimit.setLimit(newLimit);
                totalSpent += price;
                System.out.println("Compra realizada! Limite restante: R$" + cardLimit.getLimit());
            }

            var shopping = new Purchases(product, price);
            shoppingList.add(shopping);

            System.out.println("Digite 1 para continuar e 0 para encerrar.");
            int purchase = scanner.nextInt();
            scanner.nextLine();
            System.out.println(purchase);
            if (purchase == 0){
                System.out.println("Compra encerrada");
                break;
            } else if (purchase == 1) {
                System.out.println("Continuar compras");

            } else {
                System.out.println("Informação digitada inválida!");
            }
        }

        Collections.sort(shoppingList);

        System.out.println("\n===== RESUMO DAS COMPRAS =====");
        for (Purchases item: shoppingList){
            System.out.println(item);
        }
        System.out.println("\n======================");

        System.out.println("\nTotal gasto: R$" + totalSpent);
        System.out.println("Limite restante: R$" + cardLimit.getLimit());
    }
    private static Scanner getScanner() {
        return new Scanner(System.in);
    }
}
1 resposta

Oi, Thiago! Como vai?

Seu projeto está bem estruturado e mostra um bom uso de listas e orientação a objetos em Java. A separação das classes e o uso de Comparable para ordenar os itens da compra ficaram bem aplicados.

Uma dica interessante para o futuro é usar o método String.format() para formatar valores monetários com duas casas decimais, deixando a apresentação do valor mais amigável. Veja este exemplo:

double valor = 49.9;
System.out.println(String.format("Preço formatado: R$ %.2f", valor));

Codigo sem acentuacao: System.out.println(String.format("Preco formatado: R$ %.2f", valor));

Esse código exibe o preço com duas casas decimais, o que é útil ao mostrar valores para o usuário.

Ícone de sugestão

Para saber mais:

Além do String.format(), outra forma prática de formatar valores monetários em Java é usando a classe NumberFormat. Ela permite formatar valores conforme o padrão monetário do país, incluindo o símbolo da moeda e a separação correta de casas decimais. Veja um exemplo:

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

public class Exemplo {
    public static void main(String[] args) {
        double valor = 49.9;
        NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
        System.out.println("Preço formatado: " + formatoMoeda.format(valor));
    }
}

Esse código exibe: Preço formatado: R$ 49,90, respeitando o padrão brasileiro de moeda.

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