为了账号安全,请及时绑定邮箱和手机立即绑定

为什么一个类中只有一个数组列表保存所有对象的变量?

为什么一个类中只有一个数组列表保存所有对象的变量?

幕布斯7119047 2022-12-15 11:02:02
我有标题中提到的问题。我会预先介绍每一步,让您了解我正在尝试做的事情。首先,为了总结我的课程,我在下面展示了它们:Classes|___ Starter.java (main class)|___ Line.java|___ CrossSection.java|___ SectionAssigner.java在我的主类中,我创建了 ArrayList 变量,其中包含来自Line、SectionAssigner和CrossSection类的对象: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类的构造函数有两个参数,即ArrayList和CrossSection: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 行索引为Line0Line1Line2Line3Line4Line5之后,用户想要像下面这样进行横截面分配:SectionAssign0: Line0, Line1SectionAssign1: Line2, Line3, Line4, Line5因此,在上面的示例中,控制台应该在 SectionAssign0 中显示第 0 行和第 1 行;SectionAssign1 中的 line2、line3、line4、line5。但是控制台显示如下而不是:SectionAssign0: Line0, Line1, Line2, Line3, Line4, Line5SectionAssign1: Line0, Line1, Line2, Line3, Line4, Line5我不完全了解 ArrayList 的用法。一个类中的一个 ArrayList 的元素是否保留从该类创建的所有对象?还是我犯了任何致命错误?
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

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

不,只有那些添加了它。

问题在这里:

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

你们sectionAssigners都使用相同 ArrayList的(lineKeeper)。如果您希望他们单独存储东西,他们每个人都必须拥有自己的东西 ArrayList而不是共享。


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信