当前位置: 首页 > 知识库问答 >
问题:

从数组中删除对象与多个类在Java

仲绍晖
2023-03-14

我对Java相当陌生,在这个练习中我遇到了一些困难。我必须创建一个“Piggy Bank”,用户可以在其中存入不同价值和货币(欧元、多拉、雷亚尔等)的硬币,并在之后将其移除,然后将总价值转换为所需的货币。建议我们为Coin创建一个抽象超类,为Euro、Dolar和Real创建三个子类。我可以在没有外壳的情况下走得很远,但我不知道如何移除,例如,银行中的任何10美元硬币,而让其他10美元或10欧元硬币保持不变,就像一个扫描数组的Iterator,当他满足条件(dollar,value 10)时,他移除该对象并停止运行。我正在创建一个数组列表,并通过以下代码块在其上放置硬币:

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

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

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

共有1个答案

羊刚捷
2023-03-14

这是我对你想做什么的理解。如果我错过了你的实际问题,请告诉我。

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

}
 类似资料:
  • 问题内容: 文件: 有没有办法从数组中提取特定对象?IE如何从项数组中提取ID为23的整个项对象。 我努力了: 但是我很确定我没有正确使用’pull’。据我了解,pull将从数组中拉出字段,而不是对象。 关于如何将整个对象从数组中拉出的任何想法。 另外,我尝试在mongoose / nodejs中执行此操作,也不确定这种类型的内容是否在mongoose API中,但我找不到它。 问题答案: 尝试.

  • 问题内容: 我需要从满足条件的数组中删除对象,我可以根据条件更新数组的对象,如下所示: 这正在工作 为了删除我正在这样做 但这不起作用,并给出此错误, ElasticsearchIllegalArgumentException [无法执行脚本]; 嵌套:ConcurrentModificationException; 错误:ElasticsearchIllegalArgumentException

  • 现在我有了新阵列 现在,现有的_array和新的_array都有名称值“b”,我希望它从新数组中移除

  • 问题内容: 在我的应用程序中,选择单元格时在数组中添加了一个对象,重新选择单元格时取消选择并删除了对象。我使用了该代码,但给了我错误。 它给了我2像这样的错误: 问题答案: 雨燕等同的是: 如果对象是唯一的 。完全没有必要强制使用 该API 也可以使用,但这会导致不必要的隐式桥强制转换为。 如果同一对象多次出现,请使用。但是,在像数据源数组这样的情况下,将索引与特定对象相关联的情况是可取的,因为它

  • 假设对象数组如下: 如果标签和颜色相同,则为重复条目。在这种情况下,id=1和id=5的对象是重复的。 如何筛选此阵列并删除重复项? 我知道一些解决方案,在这些解决方案中,您可以使用以下内容对一个键进行过滤: 但是多个键呢? 根据评论中的要求,以下是预期结果:

  • 问题内容: 如何从数组中删除对象?我想删除,其中包括名称的对象从。例如: 我要实现: 问题答案: 您可以使用多种方法从数组中删除项目: 如果要删除position处的元素,请使用: 要么 您可以使用或结合使用参见MDN从数组中删除一个或多个元素,例如