1
resposta

[Solução]Desafio final - Aplicação de compras com cartão de crédito

Essa foi a minha solução usando a interface List, e o Comparator.comparing para fazer a ordenação por valor. Utilizei também a LinkedList para treinar e entender melhor outras estruturas de lista presentes no Java.

Classe de Compras:

package br.com.desafiocomprascartaodecredito.entities;

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

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

    public String getDescription() {
        return description;
    }

    public double getValue() {
        return value;
    }

    @Override
    public String toString() {
        return String.format("Compra: %s (R$ %.2f)", this.description, this.value);
    }
}

Classe de Cartão de Crédito:

package br.com.desafiocomprascartaodecredito.entities;

public class CreditCard {
    private double limit;

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

    public double getLimit() {
        return limit;
    }

    public void buy(Shopping shopping) {
        this.limit -= shopping.getValue();
        System.out.println("Compra realizada com sucesso!");
    }

    public void showLimitCard() {
        System.out.printf("Limite atual do cartão: R$ %.2f", this.limit);
    }
}

Classe Main:

package br.com.desafiocomprascartaodecredito;

import br.com.desafiocomprascartaodecredito.entities.CreditCard;
import br.com.desafiocomprascartaodecredito.entities.Shopping;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Shopping shopping;
        List<Shopping> shoppingList = new LinkedList<>();
        int optionMenu = 1;

        System.out.print("Informe o limite do seu cartão de crédito: ");
        double limit = scanner.nextDouble();

        CreditCard creditCard = new CreditCard(limit);

        while (optionMenu != 0) {
            System.out.print("Informe a descrição da sua compra: ");
            scanner.nextLine();
            String description = scanner.nextLine();

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

            shopping = new Shopping(description, value);

            if(creditCard.getLimit() < value) {
                System.out.println("Saldo Insuficiente");
                break;
            }

            creditCard.buy(shopping);
            shoppingList.add(shopping); // adicionando a compra na lista

            System.out.print("Digite 0 para sair ou 1 para continuar: ");
            optionMenu = scanner.nextInt();
        }

        // ordenando a lista de compras
        shoppingList.sort(Comparator.comparing(Shopping::getValue));

        System.out.println("**************");
        System.out.println("COMPRAS REALIZADAS");
        System.out.println();

        for (Shopping item: shoppingList) {
            System.out.printf("%s - R$ %.2f\n", item.getDescription(), item.getValue());
        }

        System.out.println();
        System.out.println("**************");
        System.out.println();

        creditCard.showLimitCard();
    }
}
1 resposta

Oi, Gabriel! Como vai?

Agradeço por compartilhar.

Eu gostei da sua análise, principalmente quando você explicou o uso da interface List com LinkedList e a ordenação usando Comparator.comparing, isso mostra um bom entendimento das coleções e do critério de ordenação por valor, alinhado com o desafio proposto na aula.

Continue explorando diferentes estruturas de dados e comparadores, isso fortalece bastante sua base em Java.

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