2016-08-18 18 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'に新しい 'arrayList'を追加するためにイテレータ –

+0

を使用してください。これはあなたがしたいことではないと思います。 –

答えて

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