Проблема заключается в следующем:
Напишите подмножества статических методов, которые используют рекурсивный возврат, чтобы найти все возможные подсписки данного списка. Подсписок списка 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 (слово). Зачем? Я думал, что весь смысл ListIterator состоит в том, чтобы избежать этой проблемы?
РЕДАКТИРОВАТЬ: Я также пытался решить это так:
for (String word : choices) {
List<String> choicesCopy = choices;
chosen.add(word);
choicesCopy.remove(word);
subsets(choicesCopy, chosen, alreadyPrinted);
}
Я все еще получаю исключение одновременной модификации .... :(
Как это происходит? Там нет никаких изменений в первоначальном списке ...