簡體   English   中英

從 Java 中具有多個類的數組中刪除 object

[英]Remove object from array with multiple classes in Java

我是 Java 的新手,我在這個練習中遇到了一些困難。 我必須創建一個“存錢罐”,用戶可以在其中存入具有不同價值和貨幣(歐元、美元、雷亞爾等)的硬幣,然后將其移除並將總價值轉換為所需的貨幣。 建議我們為 Coin 創建一個抽象超類,並為 Euro、Dolar 和 Real 創建三個子類。 我可以不費吹灰之力地走得很遠,但我不知道如何取出銀行中的任何 10 美元硬幣,而讓其他 10 美元或 10 歐元硬幣保持不變,就像一個掃描數組的迭代器和當他滿足標准(美元,價值 10)時,他刪除了 object 並停止運行。 我正在創建一個數組列表並通過以下代碼塊將硬幣放在上面:

ArrayList<Coin> list = new ArrayList<Coin>();

double euroCoinValue = scan.nextDouble();
list.add(new Euro(euroCoinValue)); 

double dollarCoinValue = scan.nextDouble();
list.add(new Dollar(dollarCoinValue)); 

這是我對您想要做的事情的理解。 如果我錯過了您的實際問題,請告訴我。

import java.math.BigDecimal;
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class Main {
  public static void main(String[] args) {
    Main main = new Main();
    main.testRemoveOneOfTheDollars();

    main.testRemoveOneReal();

    main.testRemoveTwoReal();

  }

  private PiggyBank setup() {
    PiggyBank piggyBank = new PiggyBank();
    piggyBank.add(new Euro(BigDecimal.valueOf(10L)));
    piggyBank.add(new Dollar(BigDecimal.valueOf(10L)));
    piggyBank.add(new Euro(BigDecimal.valueOf(10L)));
    piggyBank.add(new Dollar(BigDecimal.valueOf(10L)));
    piggyBank.add(new Real(BigDecimal.valueOf(10L)));
    return piggyBank;

  }

  public void testRemoveOneOfTheDollars() {
    PiggyBank piggyBank = setup();
    piggyBank.printCurrentState();
    piggyBank.remove("Main$Dollar");

  }

  public void testRemoveOneReal() {
    PiggyBank piggyBank = setup();
    piggyBank.printCurrentState();
    piggyBank.remove("Main$Real");
    piggyBank.printCurrentState();
  }

  public void testRemoveTwoReal() {
    PiggyBank piggyBank = setup();
    piggyBank.printCurrentState();
    piggyBank.remove("Main$Real");
    piggyBank.printCurrentState();
    try {
      piggyBank.remove("Main$Real");
    } catch (IllegalStateException e) {
      System.out.println(e.getMessage());
    }
    piggyBank.printCurrentState();
  }

  class PiggyBank {
    private List<Coin> coins;

    public PiggyBank() {
      coins = new ArrayList<Coin>();
    }

    public void add(Coin newCoin) {
      System.out.println("Adding coin [" + newCoin + "]");
      coins.add(newCoin);
    }

    public Coin remove(String coinType) {
      System.out.println("Removing coin of type [" + coinType + "]");
      int numOfCoins = coins.size();
      for (int i = 0; i < numOfCoins; i++) {
        Coin toReturn = coins.get(i);
        if (toReturn.getClass().getName().equalsIgnoreCase(coinType)) {
          coins.remove(i);
          System.out.println("Removed coin [" + toReturn + "]");
          return toReturn;
        }
      }
      throw new IllegalStateException("No Coins of type [" + coinType + "] exist in PiggyBank");
    }

    public void printCurrentState() {
      List<String> coinStrs = coins.stream().map(Coin::toString).collect(Collectors.toList());
      System.out.println("PiggyBank Current State [" + coinStrs + "]");

    }

  }

  abstract class Coin {
    protected BigDecimal value;

    public Coin(BigDecimal value) {
      this.value = value;
    }

    public BigDecimal getValue() {
      return value;
    }

    public String toString() {
      return "value: [" + getValue() + "], type [" + this.getClass().getName() + "]\n";
    }

  }

  class Euro extends Coin {
    public Euro(BigDecimal value) {
      super(value);
    }
  }

  class Dollar extends Coin {
    public Dollar(BigDecimal value) {
      super(value);
    }
  }

  class Real extends Coin {
    public Real(BigDecimal value) {
      super(value);
    }
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM