2014-10-19 2 views
-1

Когда я проверить его с 5 элементов набора, я получаю следующее исключение:Напишите метод, чтобы вычислить все перестановки строки уникальных символов

Исключение в потоке «основной» java.lang.IndexOutOfBoundsException: Индекс : 4, Размер: 2

Вот код:

static ArrayList<ArrayList<Integer>> permutation(ArrayList<Integer> set){ 

    ArrayList<ArrayList<Integer>> permutations = new ArrayList<ArrayList<Integer>>(); 

    if (set.size() <= 1) { 
     permutations.add(set); 
     return permutations; 
    } 

    for (int element : set){ 
     ArrayList<Integer> setcopy = new ArrayList<Integer>(); 
     setcopy.addAll(set); 
     setcopy.remove(element); 
     add(permutations, element, permutation(setcopy)); 
    }  
    return permutations; 
} 

static void add(ArrayList<ArrayList<Integer>> permutations, int element, ArrayList<ArrayList<Integer>> setcopy){ 


    for (ArrayList<Integer> al : setcopy){ 
      ArrayList<Integer> p = new ArrayList<Integer>(); 
      p.add(element); 
      p.addAll(al); 
      permutations.add(p); 

    } 

} 
+2

В какой строке? пожалуйста, добавьте полную информацию об ошибке – Mzf

ответ

1

вызов setcopy.remove(element) удалит Int в позиции элемента. Вы не удаляете сам элемент. Если вы хотите, чтобы удалить элемент, который вы должны написать setcopy.remove(setcopy.indexOf(element))

EDIT: Вы также можете использовать setcopy.remove (элемент), но тогда вы должны петли так:

for (Integer element : set) 

или вы можете сделать это это:

for (int element : set){ 
    //copy 
    setcopy.remove(new Integer(element)); 
} 
+0

D'oh! Хороший улов! –

+0

Спасибо! Существует два метода удаления. E удалить (int index) boolean \t удалить (Object o) – HYJ

+0

Вы правы. Я обновил ответ. – user

Смежные вопросы