2011-02-09 56 views
0
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)); 
      }   
     } 
    } 
} 

我试图打印输入字符串的所有排列组合。我真的不知道哪里出了问题,因为在纸上我发现这个执行。到哪里去错了。字符串的排列

+2

您是否尝试用调试器逐句通过您的代码,以查看其行为与您预期的不同之处? – 2011-02-09 20:31:44

+0

你怎么知道你错了?有可能是线索...... – meriton 2011-02-09 20:36:46

回答

0

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

for(int i;i<something;i++) 
    for(int j;j<somethingElse;j++) 

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

0

替换在for环两行具有以下内容:

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

因为这看起来像你的功课,我会让你找出。如果没有,一点之后将发布解释(得回去给我的日常工作;))

1

试着改变你的洗牌:

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++){ 
      shuffle(dummy+input.charAt(i), input.substring(0, i) + input.substring(i+1, input.length())); 
     }   
    } 
} 
1
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,i+1) + input.substring(0,i) + input.substring(i+1); 
       shuffle(dummy+input.substring(0,1),input.substring(1)); 
      }   
     } 
    } 
} 

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

该错误是我推测substring的功能是子字符串(beginIndex,长度)。但它是子串(beginIndex,endIndex)。

@Oli:谢谢你的帮助。