java - 为什么一个类中只有一个数组列表保存所有对象的变量?
问题描述
我有一个标题中提到的问题。我会为您提供每一步,让您了解我想要做什么。首先,为了总结我的课程,我在下面展示了它们:
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 行,其索引为
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 的元素是否保留了从该类创建的所有对象?还是我犯了什么致命的错误?
解决方案
一个类中一个 ArrayList 的元素是否保留了从该类创建的所有对象?
不,只有那些也添加了它。
问题在这里:
sectionAssigners.add(new SectionAssigner(lineKeeper, crossSections.get(crossSectionIndex)));
你们sectionAssigners
都使用相同 ArrayList
的( lineKeeper
)。如果您希望他们分开存储东西,他们每个人都必须拥有自己的 ArrayList
而不是共享。
推荐阅读
- mysql - Yii2:为什么查询生成器不返回与 SQL 语句相同的结果?
- variables - 有没有办法在 VSCode 中拆分变量?
- docker - 没有OOM异常时Docker-compose退出代码为137
- php - 在 2016 macbook 上的 MAMP 5.1 上安装 silverstripe 时出错
- r - R函数根据文本是否大写创建具有值的新列
- flutter - 如何在 Flutter 中对 MaskedTextField 进行输入验证?
- phrets - Phrets出售的数据不下载图像似乎超时
- javascript - $(this) 指的是 $(window) 而不是 .click() 方法内的单击元素
- javascript - React Hooks:隐藏/显示其他组件的元素
- django - 如何像另存为按钮一样下载导出 csv 文件(从 ajax 请求发送数据)