I'm trying to write a java method for finding the subset of a string but I keep getting a runtime error I have been unable to debug. Here is the code:
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;
}
}
Your problem is that in your
for
loop, you're iterating through a list that's constantly changing. This gives you aConcurrentModificationException
.It's better if you make a copy of your list first, before you try to iterate through it. You want something like this in place of your
for
loop.This works, of course (yes, I've tested it), but it's a bit confusing in the way that you've added SOME elements by recursion and OTHERS by iteration. I think a re-design would be a good idea.