我是一名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
阿克布
似乎在第一次调用 display Permutation("", "abc") 时,它没有完成 for 循环......
任何意见?
感谢下面所有的评论。我认为我犯的错误是因为将对象作为参数传递给方法实际上是在传递引用。它不像原始数据(按值传递)。当更改对象时,将会影响使用该对象的后续方法调用。