s=s.substring(1)+s.charAt(0)在平移后应该是231第二次输出的应该是231

s=s.substring(1)+s.charAt(0)在平移后应该是231第二次输出的应该是231

public class Arrange {
    static int c = 0;
    
    public static void main(String[] args) {
        String s = "123";
        printAllArray(s);
    }
 
    private static void printAllArray(String s) {
        printAllArray(s, "");
    }
    
    /**
     * s = s.substring(1) + s.charAt(0);
     *  它的作用是使字符串平移一位,如s为"1234",
     *  执行此句后就变为了"2341",保证每次产生不重复的结果
     * @param s
     * @param n
     */
 
    private static void printAllArray(String s, String n) {
        if (s.length() == 0) {
            System.out.println(n + "  ---  " + ++c);
        } else {
            for (int i = 0; i < s.length(); ++i) {
                printAllArray(s.substring(1), n + s.charAt(0));
                s = s.substring(1) + s.charAt(0);
            }
        }
    }
}

http://img1.sycdn.imooc.com//climg/5da0462709c69b6f06960358.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕酷酷 2019-10-12 14:26:04

同学你好

1、s.substring(1)代表截取掉s从首字母起长度为1的字符串,将剩余字符串赋值给s;

2、第一次打印输出后,也就是调用完printAllArray(s.substring(1), n + s.charAt(0));后,s=3,n=12;但是这个值并不会带入s = s.substring(1) + s.charAt(0);语句中,因为调用完printAllArray()方法后,并没有进行s参数的值传递,所以s = s.substring(1) + s.charAt(0);执行后,s的值为23,然后继续递归执行,具体如下:

http://img1.sycdn.imooc.com//climg/5da171c009db4ef106540555.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 小武鸣 #1
    为什么在输出第一次结果后,s和n的值会出现两次?
    2019-10-12 15:30:44
  • 好帮手慕酷酷 回复 提问者 小武鸣 #2
    同学你好,一次是调用printAllArray(s.substring(1), n + s.charAt(0));后的s和n值,一次是第一次private static void printAllArray()方法的中剩余的for循环中的s和n值!如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-10-12 17:20:03
好帮手慕酷酷 2019-10-11 19:36:18

同学你好,平移一位后第一位的值还是为1,因为这里截取掉了第一个字符s.substring(1),然后平移之后进行拼接。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 小武鸣 #1
    这里的s.substring(1)不是应该是第一个及他后面的字符串吗?
    2019-10-12 12:01:09
  • 提问者 小武鸣 #2
    第一次打印输出后s和n的值是多少,s=3,n=12;还是其他什么,如果s=3的话执行s = s.substring(1) + s.charAt(0);这条语句后s还是等于3啊。学生太笨,希望老师耐心讲解下,谢谢
    2019-10-12 12:06:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师