Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java置换(递归)的特殊解决方案?_Java_Recursion_Permutation - Fatal编程技术网

java置换(递归)的特殊解决方案?

java置换(递归)的特殊解决方案?,java,recursion,permutation,Java,Recursion,Permutation,根据教科书,作者要求我使用一种特殊的方法在java中实现排列。 更准确地说,存在两种功能: public void static displayPermutation(String s)——它只是调用下一个函数displayPermutation(“,String s”) 从作者的角度来看,我们应该使用递归将逗号后面的“s”中的一个字符移动到第一个字符串中 然而,我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。 这是我的密码: public static void displayPerm

根据教科书,作者要求我使用一种特殊的方法在java中实现排列。 更准确地说,存在两种功能:

public void static displayPermutation(String s)
——它只是调用下一个函数
displayPermutation(“,String s”)
从作者的角度来看,我们应该使用递归将逗号后面的“s”中的一个字符移动到第一个字符串中

然而,我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。 这是我的密码:

public static void displayPermuation(String s){
    displayPermuation("", s);
}
public static void displayPermuation(String s1, String s2){
    if(s2.length() == 0){
        System.out.println(s1);
        return;
    }else{
        for(int i = 0; i < s2.length(); i++){
            s1 = String.format(s1 + "%s", s2.charAt(i));
            s2 = String.format("%s%s", s2.substring(0, i), s2.substring(i + 1, s2.length()));
            displayPermuation(s1, s2);
        }
    }
}
publicstaticvoiddisplaypermuation(字符串s){
显示置换(“,s);
}
公共静态void displayperumation(字符串s1、字符串s2){
如果(s2.length()==0){
系统输出打印LN(s1);
回来
}否则{
对于(int i=0;i
请在下面找到此问题的解决方案。带有两个参数的函数displayPermuation将按以下方式编写。 这不起作用的原因是您正在更改for循环中的s1和s2,因此它会影响for循环迭代器

假设

s2=‘abc’

所以for循环运行3次

然后我们让s2=bc

所以长度变为2

如果您只是不更改for循环中s2的值,它将正常工作,如下面的代码所示

public static void displayPermuation(String s1, String s2) {
    if (s2.length() == 0) {
        System.out.println(s1);
        return;
    }
    for (int i = 0; i < s2.length(); i++) {
        displayPermuation(s1+s2.charAt(i), s2.substring(0,i)+s2.substring(i+1, s2.length()));
    }
}
publicstaticvoiddisplaypermuation(字符串s1、字符串s2){
如果(s2.length()==0){
系统输出打印LN(s1);
回来
}
对于(int i=0;i

希望这有帮助。

你说的“不工作”是什么意思?您预期会发生什么?实际结果是什么?在for循环的第一次迭代之后,字符串
s1
s2
不再是您假定的字符串。