2016-08-18 72 views
0

我在編程類中遇到了一些問題。使用ArrayList的遞歸方法

我有這樣一類:

enter image description here

的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; 
} 

但我不能讓它工作,我得到這個時我嘗試調用主要的方法

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()); 

什麼我做錯了任何想法?

+1

我不能按照你想要做的。但是你不能同時使用for-each循環迭代集合,並用add方法修改它。也許你需要重新設計這個。 –

+1

你正在遍歷一個arrayList,並在同一時間修改它,不能這樣做。代替'for'循環,對每個新的'Sector'使用迭代器 –

+0

,你將會有一個新的'arrayList' - 我不認爲這是你想要做的。 –

回答

0

在您的getTotalSectors方法中,將if-結構中的for循環替換爲下面的代碼。如果使用Iterator類,則不會發生異常。

Iterator<Sector> iter = sectors.iterator(); 
    while (iter.hasNext()) { 
    Sector sector1=iter.next(); 
    getTotalSectors(sector1, sectors); 
    } 
+0

我得到一個StackOverflowError與 – Tom

+0

你可以顯示getTotalSectors方法的代碼? –

+0

http://paste.ubuntu.com/23066029/對不起,我不能在評論中以「易於閱讀」的格式發表,在stackoverflow上新增 – Tom