2013-06-06 3 views
0

J'espère que ce n'est pas une question stupide, mais j'ai pris le code ci-dessous à partir d'un autre poste. Il génère juste toutes les permutations d'une chaîne. Ce que je voudrais faire est juste de le modifier pour que toutes les permutations soient ajoutées à un arraylist mais j'ai du mal à trouver ce que j'espère être la solution évidente simple. Quelqu'un peut-il donner un coup d'oeil rapide et expliquer ce que je fais mal? Je veux juste prendre les permutations d'une chaîne et créer une liste de tableau, c'est tout.Créer ArrayList à partir de permutations Java

public class UserInput { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    List<String> inputList = new ArrayList<String>(); 
    String input = scan.next(); 
    permutation(input); 

      //Error occurs here 
    inputList.addAll(permutation(input)); 

} 

public static void permutation(String str) { 
    permutation("", str); 
} 

private static void permutation(String prefix, String str) { 
    int n = str.length(); 
    if (n == 0) System.out.println(prefix); 
    else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); 
    } 
} 

}

Répondre

6

Permutation n'a pas de type de retour, il est une méthode vide, vous mettez dans une liste qui accepte uniquement les objets de type String. Vous pouvez modifier ainsi une fois la récursion atteint le niveau le plus bas, il s'ajoute à la liste comme ceci:

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    List<String> inputList = new ArrayList<String>(); 
    String input = scan.next(); 
    permutation(input, inputList); 

    System.out.println(inputList); 

} 

public static void permutation(String str, List<String> result) { 
    permutation("", str, result); 
} 

private static void permutation(String prefix, String str, 
     List<String> container) { 
    int n = str.length(); 
    if (n == 0) { 
     container.add(prefix); 
    } else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), 
        str.substring(0, i) + str.substring(i + 1, n), 
        container); 
    } 
} 

Pour "Hei"

[Hei, Hie, eHi, eiH, iHe, ieH] 
+0

Merci, cela a fonctionné. – David

-1

permutation(input) retourne void, alors que inputList.addAll() attend Collection<String>.

1

Au lieu d'imprimer la permutation, vous pouvez l'ajouter à la liste.

import java.util.List; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class UserInput { 
private static List<String> inputList; 
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    inputList = new ArrayList<>(); 
    String input = scan.next(); 
    permutation(input); 

    System.out.println(inputList.toString()); 

} 

public static void permutation(String str) { 
    permutation("", str); 
} 

private static void permutation(String prefix, String str) { 
    int n = str.length(); 
    if (n == 0) inputList.add(prefix); 
    else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); 
    } 
} 
} 
Questions connexes