2010-12-12 23 views
1

J'ai créé une classe pour le calcul de la permutation des nombres entiers avec l'arbre:aide pour remplir la classe de permutation

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); 
     } 

    } 


} 
    } 

Mon programme a aussi une classe de noeud, chaque noeud a des données, des parents, la profondeur et aussi un nlist qui conserve toutes les données de son parent et grand-parent et ... Je veux avoir une permutation en lisant les données de la racine à chaque feuille. Mais ce code cause de java.lang.StackOverflowError A la ligne

for (Integer in : array) { 

comment puis-je terminer mon code? Voulez-vous s'il vous plaît guid moi? merci

Répondre

2

Vous obtenez un débordement de pile car NoNumbers est un ArrayList nouvellement initialisé. Juste après que vous créez vous vérifiez pour voir si elle ne contient pas « dans »

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

Cela se déroulera à jamais, parce que chaque nouveau niveau de noNumbers de ne contiendront rien sur sa première itération.

+0

+1 Parce que j'écrivais juste la même chose que j'ai été informé de votre réponse ...;) – philonous