字符串的排列

public class Permute { public static void main(String[] args) throws IOException { System.out.println("Enter a string"); BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); String text = bufReader.readLine(); shuffle("",text); } public static void shuffle(String dummy, String input){ if(input.length() <= 1) System.out.println(dummy+input); else{ for(int i=0; i <input.length();i++){ input = input.substring(i,1) + input.substring(0,i) + input.substring(i+1); shuffle(dummy+input.substring(0,1),input.substring(1)); } } } } 

我试图打印输入的字符串的所有排列。 我真的无法猜到哪里出错了,因为在纸面上我发现这个正在执行。 哪里出错了。

尝试更改您的随机播放:

 public static void shuffle(String dummy, String input){ if(input.length() <= 1) System.out.println(dummy+input); else{ for(int i=0; i  
 public class Permute { public static void main(String[] args) throws IOException { System.out.println("Enter a string"); BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); String text = bufReader.readLine(); shuffle("",text); } public static void shuffle(String dummy, String input){ if(input.length() <= 1) System.out.println(dummy+input); else{ for(int i=0; i  

它应该是input.substring(i,i + 1)而不是input.substring(i,1)。 因为每次我只需要1个字符是常量,这是在字符串的开头,而其他字符必须是混乱的。

这个错误是我假设substring的function是substring(beginIndex,length)。 但它是substring(beginIndex,endIndex)。

@Oli:谢谢你的帮助。

因为这看起来像我曾经做过的家庭作业,我会在这里帮助你。 你需要两个循环,一个在另一个内。

 for(int i;i 

这将使您能够生成所需的排列。

for循环替换for循环中的两行:

  String partString = input.substring(0, i) + input.substring(i + 1); shuffle(dummy + input.charAt(i), partString); 

因为这看起来像你的作业,我会让你弄明白。 如果没有,稍后会发布解释(得到回到我的日常工作;))