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;
}
}