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); } } } }
3
收起
正在回答 回答被采纳积分+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,然后继续递归执行,具体如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星