【发布时间】:2016-08-18 01:39:09
【问题描述】:
我在编程课的练习中遇到了一些麻烦。
我有这样的课:
类的UML
我必须创建一个公共方法,从一个扇区返回子扇区的总数。
这是整个班级的代码:
public class Sector {
private int number;
private String name;
private String type;
private ArrayList<Sector> sectors = new ArrayList<>();
public Sector(int number, String name, String type) {
this.number = number;
this.name = name;
this.type = type;
}
而递归方法是这样的
public ArrayList<Sector> getTotalSectors(Sector sector, ArrayList<Sector> sectors) {
sectors.add(this);
if (sector.getSectors() != null) {
for(Sector sector1 : sector.getSectors()) {
getTotalSectors(sector1, sectors);
}
}
return sectors;
}
但我不能让它工作,当我尝试调用 main 中的方法时,我得到了这个
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
** 主类 **
Sector s1 = new Sector(100, "sales", "sales");
Sector s1_1 = new Sector (101, "minor sales", "minor");
Sector s1_2 = new Sector (102, "mayor sales", "mayor");
Sector s1_2_1 = new Sector (102, "lala sales", "lalala");
s1.getSectors().add(s1_1);
s1.getSectors().add(s1_2);
s1_2.getSectors().add(s1_2_1);
s1.getTotalSectors(s1, s1.getSectors());
知道我做错了什么吗?
【问题讨论】:
-
我无法理解您要执行的操作。但是您不能同时使用 for-each 循环遍历集合并使用 add 方法对其进行修改。也许你需要重新设计它。
-
您正在遍历 arrayList 并同时修改它,不能这样做。而不是
for循环,使用迭代器 -
"返回子扇区总数的公共方法"你想获取计数还是创建一个包含所有子扇区的新 ArrayList
变量。 -
它必须返回一个包含一个扇区的所有子扇区的ArrayList,但同时一个子扇区可以有多个子扇区
-
例如:sector1 扇区1_1 扇区1_2 扇区1_2_1 如果我使用扇区1的方法,它应该返回一个包含3个对象(扇区1_1,扇区1_2,扇区1_2_1)的数组列表