Как мне исправить свой код, чтобы он возвращал обновленное значение после покупки

#arraylist

#arraylist

Вопрос:

Это мой объект coin, который я использую в arraylist в моем коде драйвера.

 public class Coin
{
    private int side;
    private double value;
    private String name;

     public Coin()
    {

        side = 1;
        value = 0.25;
        name = "Quarter";
    }

    public Coin(String iname, double ivalue)
    {
        name = iname;
        value = ivalue;
        flip();
    }


    public String getName()
    {
        return name;
    }

    public double getValue()
    {
        return value;
    }

    public void setName(String iname)
    {
        name = iname;
    }

    public void setValue(double ivalue)
    {
        value = ivalue;
    }

    public String flip()
    {
        side = (int)(Math.random()* 2);
        if (side == 0)
           return "Heads";
        else 
           return "Tails";
     }
    public String toString()
    {   String outside = "";
        if (side == 0)
          outside = "Heads";
        else 
          outside = "Tails";

        return "Coin name "   name   "Coin value: "   value   "  "   outside;
      }
}
  

Это мой класс coindriver, здесь у меня проблема, из-за которой я не могу вернуть значение обновленного списка кошельков.

 import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;

public class CoinDriver
{
    private List<Coin> Wallet;
    public  CoinDriver()
    {
        Wallet = new ArrayList<>();
    }

    public static void main(String[] args)
    {
        int choice = 0;
        CoinDriver Wallet = new CoinDriver();
        Scanner scanner = new Scanner(System.in);
        while (choice != 2)
        {
            System.out.println("1 Purchase an item 2 Calculate money in wallet and end program");
            choice = scanner.nextInt();
            Wallet.InputCoin();
            if (choice == 1)
                Wallet.PurchaseItem();
            System.out.println("Net amount in your wallet is "   Wallet.WalletValue());
        }
    }

    void InputCoin()
    {
        Coin Penny = new Coin ("Penny",0.01);
        Coin Dime = new Coin ("Dime", 0.10);
        Coin Dollar = new Coin ("Dollar",1.00);
        Coin Twenty = new Coin ("Twenty", 20.00);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Twenty);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Twenty);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Twenty);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Twenty);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Twenty);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
        Wallet.add(Penny);
        Wallet.add(Dime);
        Wallet.add(Dollar);
    }

    double WalletValue()
    {
        double sum = 0;
        for(int x = 1; x < Wallet.size(); x  )
        {
            sum  = Wallet.get(x).getValue();
        }
        return sum;
    }

    void PurchaseItem()
    {
        Coin Penny = new Coin ("Penny",0.01);
        Coin Dime = new Coin ("Dime", 0.10);
        Coin Dollar = new Coin ("Dollar",1.00);
        Coin Twenty = new Coin ("Twenty", 20.00);

        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter the cost of item you want to purchase: ");
        double price = scanner.nextDouble();
        double total = WalletValue();
        int round = (int) Math.round(price);
        int calctwenty = round/20;
        int calcdollar = round - calctwenty*20;
        double calcdime = price%1;
        double rounddime = (Math.round(calcdime))/10;
        double calcpenny = (price*10)%1;
        double roundpenny = (Math.round(calcpenny));

        if (price > total)
        {
            System.out.println("Insufficient money, cannot purchase");
            return;
        }

        if (calctwenty > 0)
        {
            for (int i = 0; i < calctwenty; i  )
            {
                Wallet.remove(Twenty);
            }
        }
        if (calcdollar > 0)
        {
            for (int j = 0; j < calcdollar; j  )
            {
                Wallet.remove(Dollar);
            }
        }
        if (rounddime > 0)
        {
            for( int y = 0; y < rounddime; y  )
            {
                Wallet.remove(Dime);
            }
        }
        if (rounddime > 0)
        {
            for ( int p = 0; p < roundpenny; p  )
            {
                Wallet.remove(Penny);
            }
        }
        WalletValue();
    }

}
  

Я хочу, чтобы код возвращал обновленные значения после совершения покупки и удаления объектов. Однако на практике код по-прежнему возвращает начальное значение кошелька. Пожалуйста, помогите, спасибо

Комментарии:

1. В чем именно проблема?

2. Я не совсем уверен, но я думаю, что это происходит в моем методе void PurchaseItem, в котором в конце я использую метод WalletValue(), и он по-прежнему возвращает начальную сумму денег без обновления

3. 1 Купите товар 2 Подсчитайте деньги в кошельке и завершите программу 1 Введите стоимость товара, который вы хотите приобрести: 20 Чистая сумма в вашем кошельке составляет 109,98 1 Купите товар 2 Подсчитайте деньги в кошельке и завершите программу 2 Чистая сумма в вашем кошельке составляет 219,96999999999989 (это то, что происходит, когда я пытаюсьзапустите программу)