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!

2
respostas

Resolução problema com listas

De cara eu não consegui resolver praticamente nada no desafio. Fiz toda a lógica na main com as entradas de scanner, mas não consegui aplicar o uso de métodos com essas entradas, e nem utilizar dados de outra classe como parametros de método e construtor. Porém, fui tentando aos poucos entender e quando achei que entendi, tentei fazer tudo sem consultar. Depois que consegui, decidi adicionar algumas camadas pra testar se realmente tinha entendido ou só decorado kkk Enfim, fiz essa resolução onde existe um pedido e dentro dele é possível fazer mais de uma compra. Os produtos são organizados por valor dentro de cada compra, e o pedido organiza todas comprar feitas. Outra coisa que busquei praticar foi colocar menos lógica dentro da classe principal, e mais dentro das classes, pq dessa forma eu acaba me forçando a explorar o relacionamento entre elas. Ah, eu usei IA em algums momentos que travei, pedindo ela pra me fazer perguntas que ajudariam a ver como resolver, ao invés de me dar código pronto e ajudou bastante.

//PRINCIPAL 


import java.util.Scanner;

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

        System.out.println("Credit card limit: ");
        double limit = scanner.nextDouble();
        scanner.nextLine();

        CreditCard card = new CreditCard(limit);
        int exitPurchase = 0;
        int exitOrder= 0;
        int j = 1;

        Order order = new Order();
        System.out.println("Order open:");
    do {
        Purchase purchase = new Purchase();
        System.out.println("Purchase number " + j++);
        do {
            System.out.print("Item description: ");
            String itemName = scanner.nextLine();
            System.out.print("Item value: ");
            double itemValue = scanner.nextDouble();
            Product product = new Product(itemName, itemValue);
            purchase.addProduct(product);

            System.out.print("Type 1 to add another item or 0 to close purchase: ");
            exitOrder = scanner.nextInt();
            scanner.nextLine();

        } while (exitOrder != 0);
        order.addPurchase(purchase);
        purchase.sortProduct();
        purchase.showPurchase();

        System.out.print("Type 1 to make another purchase or 0 to finish order: ");
        exitPurchase = scanner.nextInt();
        scanner.nextLine();

    } while (exitPurchase != 0);

        System.out.println("Order finished!");
        order.sortPurchases();
        order.showOrder();
        System.out.println();


        System.out.println("Press 1 to pay or 0 to close: ");
        int pay = scanner.nextInt();

        if (pay == 1) {
            if (card.validatedPurchase(order)) {
                System.out.println("Credit Card aproved.");
                System.out.println("Order Sucessfull!");
            } else {
                System.out.println("Error!");
                System.out.println("Insuficient credit card limit");
            }
        }
        System.out.println("Closing....");


    }
}



//CARTÃO DE CRÉDITO

public class CreditCard {
    private double limit;
    private double balance;


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

    public boolean validatedPurchase(Order order) {
        if (this.balance >= order.getValue()) {
            this.balance -= order.getValue();
            return true;
        }
        return false;
    }

    public double getLimit() {
        return limit;
    }

    public double getBalance() {
        return balance;
    }


}


2 respostas
//COMPRAS

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

public class Purchase implements Comparable<Purchase>{
    private String description;
    private double total = 0;
    private List<Product> products = new ArrayList<>();

    public void addProduct(Product product){
        this.products.add(product);
    }

    public void sortProduct() {
        Collections.sort(products);
    }

    public void showPurchase() {
        System.out.println("Purchase finished! ");
        System.out.println("********************");
        for (Product product: products) {
            System.out.println(product.getName() + " - R$" + product.getValue());
        }
        System.out.println("********************");
        System.out.println("Total of purchase: " + totalValuePurchase());
    }

    public double totalValuePurchase(){
        total = 0;
        for (Product product:products){
            this.total += product.getValue();

        }
        return total;
    }

    public String getDescription() {
        return description;
    }


    public List<Product> getProducts() {
        return products;
    }

    @Override
    public int compareTo(Purchase otherPurchase) {
        return Double.valueOf(this.total).compareTo(Double.valueOf(otherPurchase.total));
    }


}

//PEDIDO

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

public class Order {
    private double value;
    private List<Purchase> purchases = new ArrayList<>();


    public void addPurchase(Purchase purchase) {
        this.purchases.add(purchase);
        this.value += purchase.totalValuePurchase();
    }

    public void sortPurchases() {
        Collections.sort(purchases);
    }

    public void showOrder() {
        for (int i = 0; i < purchases.size(); i++) {
            Purchase purchase = purchases.get(i);
            System.out.println("_______________________");
            System.out.println("Purchase #" + (i + 1) + ":");
            System.out.println("************");
            for (Product product: purchase.getProducts()) {
                System.out.println(product.getName() + ": R$" + product.getValue());
            }
            System.out.println("************");
            System.out.println("Total: " + purchase.totalValuePurchase());
            System.out.println("_______________________");
        }

        System.out.println("Total of order: " + value);

    }

    public double getValue() {
        return value;
    }

    public List<Purchase> getPurchases() {
        return purchases;
    }



}

//PRODUTO

public class Product implements Comparable<Product>{
    private String name;
    private double value;

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

    public String getName() {
        return name;
    }

    public double getValue() {
        return value;
    }

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

Olá, Ana Flávia! Como vai?

Obrigado por compartilhar sua experiência conosco!

É muito interessante perceber sua evolução durante o desafio, você começou tendo dificuldade e aos poucos conseguiu compreender esses conceitos na prática. O fato de ter tentado refazer a solução sem consultar depois de entender também mostra uma preocupação em verificar se o conhecimento realmente foi assimilado.

Outro ponto muito positivo foi a forma como você utilizou a IA durante os momentos de dificuldade. Em vez de buscar diretamente uma solução pronta, você a utilizou para receber perguntas que ajudassem a desenvolver o próprio raciocínio. Essa abordagem pode ser bastante útil para transformar a IA em uma ferramenta de aprendizagem, sem deixar de lado o processo de construção da solução.

Continue explorando esse tipo de estratégia nos próximos desafios.

Abraço e bons estudos!

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