Проблема заключается в следующем:
Напишите подмножества статических методов, которые используют рекурсивный поиск с возвратом для поиска всех возможных подсписков заданного списка. Подсписок списка L содержит 0 или более элементов L. Ваш метод должен принимать список строк в качестве своего параметра и печатать каждый подсписок, который может быть создан из элементов этого списка, по одному в строке. Например, предположим, что переменная с именем list хранит следующие элементы:
[Janet, Robert, Morgan, Char]
Вызов подмножеств(списка); выдаст следующий вывод:
[Janet, Robert, Morgan, Char]
[Janet, Robert, Morgan]
[Janet, Robert, Char]
[Janet, Robert]
[Janet, Morgan, Char]
[Janet, Morgan]
[Janet, Char]
[Janet]
[Robert, Morgan, Char]
[Robert, Morgan]
[Robert, Char]
[Robert]
[Morgan, Char]
[Morgan]
[Char]
[]
Часть моего решения требует использования рекурсивного возврата:
ListIterator<String> itr = choices.listIterator();
while (itr.hasNext()) {
String word = itr.next();
chosen.add(word);
itr.remove();
subsets(choices, chosen, alreadyPrinted);
chosen.remove(word);
itr.add(word);
}
Но я получаю исключение ConcurrentModificationException в строке с itr.add(word). Почему? Я думал, что весь смысл ListIterator в том, чтобы избежать этой проблемы?
РЕДАКТИРОВАТЬ: я также пытался решить это следующим образом:
for (String word : choices) {
List<String> choicesCopy = choices;
chosen.add(word);
choicesCopy.remove(word);
subsets(choicesCopy, chosen, alreadyPrinted);
}
Я все еще получаю исключение concurrentmodification.... : ( Как это происходит? Исходный список вообще не модифицируется...