-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 回答