首页 > 解决方案 > 在arraylist中存储同一父级的多个数据类型

问题描述

我有一个 A 类,它是一个父类。然后我有一组未知的类(我们称它们为 B、C、D 等),它们都是 A 的子类。作为公共变量,A 的所有对象都将 int 变量 price 定义为参数。在另一个类中,我需要编写一个代码来访问用户指定的 B、C、D 等实例。代码操作、读取和以其他方式处理这些对象,以便稍后在 JTable 中显示它们。我首先在范围内定义 arraylist:

ArrayList<A> theArrayList = new ArrayList<>();
int wealth = (some code that defines the int);

稍后我在构造函数中运行以下代码:

while (this.theArrayList.size() == 0) {
  int i = 0;
  while (this.theArrayList.toArray().length > i) {
       for (A a : this.theArrayList) {
          if (a.price > this.wealth) {
              this.anArrayListOfAFromPreviousCodeBlock.add(a);
          }

          int randomIndex = (int) (Math.random() * 
              this.anArrayListOfAFromPreviousCodeBlock.toArray().length);
          if (this.anArrayListOfAFromPreviousCodeBlock.size() == 0) {
                JOptionPane.showMessageDialog(null, "Array length is 0!");
          }
         //Error source
         this.thisArrayList.add(this.anArrayListOfAFromPreviousCodeBlock.get(randomIndex)); 
     }
   i++;
}

theArrayList 和 anArrayListOfAFromPreviousCodeBlock 都使用相同的格式定义:

//in the scope of the class:
ArrayList<A> theArrayList;
ArrayList<A> anArrayListOfAFromPreviousCodeBlock;

//later in the constructor: 
this.theArrayList = new ArrayList<>();
this.anArrayListOfAFromPreviousCodeBlock = new ArrayList<>();

我遇到的问题是每次运行这段代码时,我都会在标记的行中得到“IndexOutOfBoundsException:Index 0,Size 0”。如果我解释正确,this.thisArrayList 的大小始终为 0。我对其进行了初始化,但它仍然为空。我在第二个代码块的第一行添加了条件,但它导致无限循环而不是解决方案。由于涉及随机机会,我认为我很不幸,并且数组列表总是空的。但是由于它根本无法填充,不可能,我发现这可能是因为arraylist中的数据类型不兼容。由于我编写的代码是使用 As 而不是 A 的子级进行操作,因此可能存在问题。我不确定如何进一步解决这个问题。不知何故,我需要在 Arraylist 中存储未知数量的未知数量数据类型的对象。我会使用常规数组,但 Arraylist 是未知的并且可能会改变大小。但我仍然需要它稍后在 JTable 中显示数据。

根据要求,让我解释一下代码应该做什么:正如我所说,我有许多来自 A 的子类。程序创建了这些子类的未知数量的对象。此代码块的目标是检查每个 A 并取其价格来检查它是否大于 this.wealth。我使用这种方法的对象有财富,财富是上面定义的一个 int。如果这样做了,则该对象将添加到上述代码第 6 行中的数组列表中。然后我以随机顺序对该数组中的元素执行其他操作以避免偏差。这就是我采用随机索引的原因。出于安全原因,并且在此循环的另一次迭代发生时不丢失数据,我将所有选择的元素添加到新的 Arraylist。一旦代码完全完成,这个数组列表将使用 JTable 显示。

标签: javaobjectarraylist

解决方案


推荐阅读