0

我希望这不是一个愚蠢的问题,但我从另一篇文章中获取了下面的代码。它只是生成字符串的所有排列。我想做的只是修改它,以便将所有排列添加到一个数组列表中,但是我很难找到希望是简单明显的解决方案。有人可以快速浏览一下并解释我做错了什么吗?我只想获取一个字符串的排列并创建一个数组列表,仅此而已。

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

}

4

3 回答 3

6

Permutation 没有返回类型,它是一个 void 方法,你把它放在一个只接受 type 对象的列表中String。您可以对其进行修改,以便一旦递归达到最低级别,它将自己添加到列表中,如下所示:

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

为了"Hei"

[Hei, Hie, eHi, eiH, iHe, ieH]
于 2013-06-06T21:07:08.340 回答
1

您可以将其添加到列表中,而不是将排列打印出来。

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));
    }
}
}
于 2013-06-06T21:11:05.807 回答
-1

permutation(input)返回 void,而 inputList.addAll()期望Collection<String>.

于 2013-06-06T21:07:09.997 回答