我是一名Java初学者,正在尝试从Java编程书籍中进行字符串排列练习。我定义了两个方法:
public static void displayPermutation(String s)
public static void displayPermutation(String s1, String s2)
第一种方法只需调用
displayPermutation(" ", s)
即可。第二种方法使用循环将s2中的字符移动到s1中,并使用新的s1和s2进行递归调用。基本情况是s2为空,将s1打印到控制台。有人能帮我找到以下代码的问题吗?
这是一个例子:
public static void displayPermutation(String s) {
displayPermuatation("", s);
}
private static void displayPermuatation(String s1, String s2) {
//base case: when s2 is empty, print s1
if (s2.isEmpty()) {
System.out.println(s1);
}
else {
for (int i = 0; i < s2.length(); i++) {
//move a char from s1 to s2, and recursively invokes it with
//new s1 and s2
s1 = s1 + s2.charAt(i);
s2 = s2.substring(0, i) + s2.substring(i+1);
displayPermuatation(s1, s2);
}
}
}
如果 s = "abc",则只打印: abc acb
在第一次调用 displayPermuatation("", "abc") 时,似乎没有完成 for 循环....有任何意见吗?
感谢下面的所有评论。我认为我犯的错误是将对象作为参数传递给方法实际上是传递引用。它不像原始数据(按值传递)。当更改对象时,它将影响使用该对象的后续方法调用。
s2
赋新值,同时检查它的长度(s2.length()
)。这可能会导致问题。 - regulus