помощь для завершения класса перестановки - PullRequest
1 голос
/ 13 декабря 2010

Я создал класс для расчета перестановки целых чисел с деревом:

 public class Permut {

ArrayList<Integer> list = new ArrayList<Integer>();
public static void main(String args[])
{
    ArrayList<Integer> t = new ArrayList<Integer>();
    t.add(1);
    t.add(2);
    t.add(3);
    Permut permutation = new Permut();
    permutation.permutation(t);
}
public ArrayList<List> permutation(ArrayList<Integer> array)
{
    Node node = new Node();  //root
    node.data = -1;
    node.depth = 1;
    Node parent = node;

    permut(parent,array,node.depth);


    return null;

}
private void permut(Node parent, ArrayList<Integer> array, int i) {
    // TODO Auto-generated method stub
    ArrayList<Integer> noNumbers = new ArrayList<Integer>();
    for (Integer in : array) {
        if(!noNumbers.contains(in) || !parent.noList.contains(in)|| i<array.size())
        {
        Node no = new Node();
        no.data = in;
        no.parent = parent;
        no.depth = i+1;
        no.noList.add(in);
        noNumbers.add(in);
        permut(no,array,no.depth);
        }

    }


}
   }

В моей программе также есть класс узлов, у каждого узла есть данные, родитель, глубина, а также nList, который хранит вседанных своего родителя, дедушки и бабушки и… я хочу перестановку, читая данные от корня до каждого листа.Но этот код вызывает java.lang.StackOverflowError. В строке

  for (Integer in : array) {  

как я могу завершить мой код?Не могли бы вы наставить меня?спасибо

1 Ответ

2 голосов
/ 13 декабря 2010

Вы получаете переполнение стека, потому что noNumbers является недавно инициализированным ArrayList.Сразу после создания вы проверяете, не содержит ли оно «in»

 ArrayList<Integer> noNumbers = new ArrayList<Integer>();
for (Integer in : array) {
    if(!noNumbers.contains(in) || !parent.noList.contains(in)|| i<array.size())
    {

Это будет выполняться вечно, потому что noNumbers каждого нового уровня не будет содержать ничего на первой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...