2010-12-10 29 views
-1

J'ai écrit un tel code ci-dessous et je vais passer deux listes à cette méthode qui tree list est la liste vide et array list est une liste d'objets.pourquoi ne retourne pas les permutations correctes!

public void permute(List<Element> tree, List<Element> array) { 
    if (array.size() <= 1) { 
     for (Element i : array) { 
      tree.add(i); 
     } 
     System.out.println(tree.toString()); 
    } else { 
     for (int i = 0; i < array.size(); i++) { 
      try { 
       list = array.subList(0, i); 
       list.add(array.get(i + 1)); 
       tree.add(array.get(i)); 
       permute(tree, list); 

      } catch (StringIndexOutOfBoundsException exception) { 
       exception.printStackTrace(); 
      } 
     } 
    } 

} 

mais il imprimera les lignes ci-dessous:

[digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 
[digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0, digit :7 probability: 66.0] 

aussi les lignes sont poursuivies, mais je ici que quelques-uns copiés d'entre eux! quel est son problème? s'il vous plaît aidez-moi grâce EDIT: Voici le code pour cordes et je l'ai utilisé pour mes objets:

import java.io.*; 
public class NewClass{ 
    public static void main(String args[]) throws IOException{ 
     String str; 
     System.out.println("Enter the initial string"); 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     str=br.readLine(); 
     System.out.println("Permutations are :"); 
     permute("", str); 
    } 

    public static void permute(String beginningString, String endingString) { 
    if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 
    else 
     for (int i = 0; i < endingString.length(); i++) { 
     try { 
      String newString = endingString.substring(0, i) + endingString.substring(i + 1); 

      permute(beginningString + endingString.charAt(i), newString);   
     } catch (StringIndexOutOfBoundsException exception) { 
      exception.printStackTrace(); 
     } 
     } 
    } 
} 
+0

Que voulez-voulez-vous atteindre? Quel résultat attendez-vous si vous passez le tableau [1, 2, 3, 4, 5]? –

+0

Qu'avez-vous ** initialement ** transmis en tant que paramètres, c'est-à-dire Quelle est la valeur initiale de 'beginString' et la valeur initiale de' endingString'? –

+0

Je veux toutes ses permutations! par exemple pour 5 chiffres, j'en veux 5! permutations que chacun sera montré comme une liste de tableau. – user472221

Répondre

1

Essayez le code ci-dessous. J'ai simplement pris votre méthode de permutation qui fonctionne pour les chaînes, et l'a traduit (presque ligne par ligne) en une qui devrait fonctionner pour n'importe quel type de liste.

public static <E> void permute2(List<E> beginningList, List<E> endingList) { 
    if (endingList.size() <= 1) { 
     //combine the two lists 
     List<E> result = new ArrayList<E>(beginningList); 
     result.addAll(endingList); 
     System.out.println(result); 
    } else 
     for (int i = 0; i < endingList.size(); i++) { 

      //create a list without the ith element 
      List<E> newList = new ArrayList<E>(endingList); 
      newList.remove(i); 

      //create a list by adding the ith element to beginning 
      List<E> newBeginning = new ArrayList<E>(beginningList); 
      newBeginning.add(endingList.get(i)); 

      permute2(newBeginning, newList); 
     } 
} 

Exemple:

public static void main(String args[]) { 
    permute2(new ArrayList<Integer>(), new ArrayList<Integer>(Arrays.asList(1, 2, 3))); 
} 

Prints:

[1, 2, 3] 
[1, 3, 2] 
[2, 1, 3] 
[2, 3, 1] 
[3, 1, 2] 
[3, 2, 1] 
+0

vous avez raison, merci pour la réponse, je pense à trouver ma vraie erreur! – user472221