Глядя на ваш код (и я не хочу быть недобрым), я не думаю, что вы на правильном пути с этим.
Я рекомендую в качестве первого шага забытьо коде в целом, и просто подумайте об алгоритме или процессе, который вы бы использовали.Вы должны быть в состоянии записать это на английском языке в виде списка шагов.Только после того, как у вас есть этот список, вы должны подумать о том, как реализовать его в коде.
Чтобы ответить на ваш реальный вопрос, в настоящее время вы получаете исключение, потому что вы получаете доступ к элементам после концасписок.Отчасти это связано с тем, что приращение до z
равно list.length
останавливается слишком поздно;массив длиной 4 содержит элементы с индексами 0-3, поэтому list[4]
сгенерирует исключение, с которым вы сталкиваетесь.
(Прямо сейчас ваша логика поиска комбинации не будет работать правильно. x
никогда не изменяется, поэтому каждая комбинация (с учетом примера) будет начинаться с Kennedy
. Когда z
достигает длины списка, она перестает расти, но y
продолжает расти, поэтому вы получите несколько итераций, гдевторая и третья записи идентичны, и вы не рассмотрели, превысит ли y
границы. Вы также перебираете i
, но ничего не делаете с ним. Ваша программа, если она не вылетает, выдастчто-то вроде этого:
Kennedy, Johnson, Nixon
Kennedy, Johnson, Ford
Kennedy, Nixon, Ford
Kennedy, Ford, Ford
Kennedy, Johnson, Nixon
Kennedy, Johnson, Ford
Kennedy, Nixon, Ford
Kennedy, Ford, Ford
Kennedy, Johnson, Nixon
Kennedy, Johnson, Ford
Kennedy, Nixon, Ford
Kennedy, Ford, Ford
Kennedy, Johnson, Nixon
Kennedy, Johnson, Ford
Kennedy, Nixon, Ford
Kennedy, Ford, Ford
И у вас есть лот специального кожуха. Предположение, что вам нужно выполнить итерацию, в то время как j < 3
работает только тогда, когда ровно четыре элементаво входных данных. Проверка того, что вы должны увеличить y
if j >= 1
, снова является особым случаем, который создает правильный результат только с четырьмя элементами. Опять же, я призываю вас подуматьо процессе, который вы могли бы использовать, чтобы найти каждую перестановку из трех элементов на входе произвольной длины , вообще не думая о коде.)