【问题标题】:Why only one arraylist in a class holds variables of all objects?为什么一个类中只有一个数组列表保存所有对象的变量?
【发布时间】:2019-10-11 17:32:04
【问题描述】:

我有一个标题中提到的问题。我会为您提供每一步,让您了解我想要做什么。首先,为了总结我的课程,我在下面展示了它们:

Classes
|___ Starter.java (main class)
|___ Line.java
|___ CrossSection.java
|___ SectionAssigner.java

在我的主类中,我创建了 ArrayList 变量,其中包含来自 LineSectionAssignerCrossSection 类的对象:

public static void main(String[] args) {
    ArrayList<Line> lines = new ArrayList<Line>();
    ArrayList<Line> lineKeeper = new ArrayList<Line>();
    ArrayList<CrossSection> crossSections = new ArrayList<CrossSection>();
    ArrayList<SectionAssigner> sectionAssigners = new ArrayList<SectionAssigner>();
}

SectionAssigner类的构造函数得到两个参数ArrayListCrossSection

public SectionAssigner(ArrayList<Line> lineList, CrossSection crossSection){
    this.lineList = lineList;
    this.crossSection = crossSection;
}

另外,SectionAssigner类通过getLinesLength()函数返回所有行(this.linelist)的长度:

public ArrayList<Double> getLinesLength(){
    for (int k=0; k<this.lineList.size(); k++) {
        this.returnedIndex.add(this.lineList.get(k).getLength());
    }
    return this.returnedIndex;
}

在我的主类的以下代码行中,我要求用户“您想将哪些行和横截面分配给 SectionAssigner?”,然后我将用户行选择保留在 linekeeper crossSectionIndex 变量中的变量和横截面索引。然后,使用这些数据,我从 SectionAssigner 创建一个新变量,该变量也插入到 sectionAssigners ArrayList:

sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));

最后,我向用户展示了哪些行被分配到哪些部分:

System.out.println("SectionAssigned" + counter + ": " + sectionAssigners.get(counter).getLinesLength() ); 

这些代码和我正在尝试做的事情可能很难理解,所以我将在下面用一个例子来说明它们:

假设用户有 6 行索引为

Line0
Line1
Line2
Line3
Line4
Line5

之后,用户想要像下面这样进行横截面分配:

SectionAssign0: Line0, Line1
SectionAssign1: Line2, Line3, Line4, Line5

所以,在上面的例子中,控制台应该在 SectionAssign0 中显示 line0 和 line 1; SectionAssign1 中的第 2 行、第 3 行、第 4 行、第 5 行。但控制台显示如下而不是:

SectionAssign0: Line0, Line1, Line2, Line3, Line4, Line5
SectionAssign1: Line0, Line1, Line2, Line3, Line4, Line5

我不完全了解 ArrayList 的用法。一个类中一个 ArrayList 的元素是否保留了从该类创建的所有对象?还是我犯了什么致命的错误?

【问题讨论】:

    标签: java class oop arraylist


    【解决方案1】:

    类中一个 ArrayList 的元素是否保留了从该类创建的所有对象?

    不,只有添加的那些。

    问题出在这里:

    sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));
    

    您的所有sectionAssigners 都使用相同 ArrayList (lineKeeper)。如果你想让他们分开存储东西,他们每个人都必须有自己的自己的ArrayList,而不是共享。

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2021-06-21
      • 2011-04-17
      • 1970-01-01
      相关资源
      最近更新 更多