我希望这不是一个愚蠢的问题,但我从另一篇文章中获取了下面的代码。它只生成一个字符串的所有排列。我想要做的就是修改它,以便将所有排列添加到arraylist中,但是我很难找到希望这个简单明显的解决方案。有人可以快速看一下并解释我做错了什么吗?我只是想取一个字符串的排列并创建一个数组列表,就是这样。
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));
}
}
}
答案 0 :(得分:6)
Permutation没有返回类型,它是一个void方法,您将它放在一个只接受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]
答案 1 :(得分: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));
}
}
}
答案 2 :(得分:-1)
permutation(input)
返回无效,而inputList.addAll()
则需要Collection<String>
。