[英]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.