-1

文字列のサブセットを見つけるための Java メソッドを作成しようとしていますが、デバッグできなかったランタイム エラーが発生し続けます。コードは次のとおりです。

public static List<String> subset(String m, List<String> list){
    if (m.length() <= 1){
        list.add(m);
        return list;
    }
    else{
        String letter = m.substring(0,1);
        String rest = m.substring(1,m.length());
        for (String x : subset(rest,list)){
            list.add(letter + x);

        }

        list.add(letter);
        return list;
    }
}
4

1 に答える 1

1

あなたの問題は、forループ内で、常に変化するリストを繰り返し処理していることです。これにより、 が得られますConcurrentModificationException

リストを反復処理する前に、最初にリストのコピーを作成することをお勧めします。forループの代わりにこのようなものが必要です。

List<String> copy = new ArrayList<String>(subset(rest,list));
for (String x : copy){
   list.add(letter + x);
}

もちろん、これは機能します (はい、テストしました) が、再帰によっていくつかの要素を追加し、反復によってその他の要素を追加したという点で、少し混乱します。デザインを一新するのはいいアイデアだと思います。

于 2013-12-28T02:04:15.553 に答える