Hice una propuesta mas sencilla, pero logre que funcionara:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
static ArrayList<String> productDescriptionList = new ArrayList<>();
static ArrayList<Integer> productPriceList = new ArrayList<>();
static int limit;
static int cardRemainingBalance;
static int pricesTotal;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(pricesTotal);
System.out.println("Card limit is:");
limit = scanner.nextInt();
scanner.nextLine();
cardRemainingBalance = limit;
makePurchase(scanner);
scanner.close();
}
public static void makePurchase(Scanner scanner) {
System.out.println("Product Description:");
String productDescription = scanner.nextLine();
productDescriptionList.add(productDescription);
System.out.println("Product Price:");
int productPrice = scanner.nextInt();
scanner.nextLine();
if (productPrice>cardRemainingBalance) {
System.out.println("Purchase failed! Balance is insufficient");
System.out.println("Remaining balance in card:" + cardRemainingBalance);
} else {
productPriceList.add(productPrice);
cardRemainingBalance = balanceCalculator(limit);
System.out.println("Purchase completed!");
System.out.println("Enter 0 to exit or 1 to continue");
int command = scanner.nextInt();
scanner.nextLine();
if (command == 0) {
displaySummary(limit);}
else {
makePurchase(scanner);
}
}
}
public static void displaySummary(int limit){
System.out.println("******************");
System.out.println("PURCHASES");
for (int i = 0; i < productDescriptionList.size(); i++) {
String productDescription = productDescriptionList.get(i);
int productPrice = productPriceList.get(i);
System.out.println(productDescription + " - " + productPrice);}
System.out.println("****************************");
System.out.println("Remaining balance in card:" + cardRemainingBalance);
}
public static int balanceCalculator(int limit){
pricesTotal = productPriceList.stream()
.mapToInt(Integer::intValue)
.sum();
cardRemainingBalance = limit- pricesTotal;
return cardRemainingBalance;
}
}