Java - 使用递归查找单词的排列?

时间:2012-05-03 16:29:26

标签: java

我有一个程序,它会找到作为命令行参数给出的单词的所有可能的排列,但是我无法从程序中获得任何输出,程序编译得很好,当我运行程序时,我看不出有什么问题。有任何想法吗?

    import java.io.*;
02   
03  public class Anagrams
04  {
05      private static char [] word;
06      private static char [] permutation;
07      private static boolean [] characterUsed;
08   
09       
10       
11      public static void main(String [] args)throws Exception
12      {
13        
14         word = args[0].toCharArray();
15         permutation = new char[word.length];
16         characterUsed =  new boolean[word.length];
17         printPermutations(0);
18      }//main
19       
20     private static void printPermutations(int currentIndex)throws Exception          
02     {
03   
04      if(currentIndex == permutation.length)
05          System.out.println(permutation);
06      else
07      {
08          for(int index=0;index<word.length-1;index++)
09          {
10  //if the character at that index hasn't been used       
11             if(!characterUsed[index]);
12              {
13                 //mark character at this position as in use
14                 characterUsed[index] = true;
15                 //put the character in the permutation
16                permutation[index]= word[currentIndex];
17                 printPermutations(currentIndex +1);
18                 characterUsed[index] = false;
19               }//if
20           }//for
21         }//else
22       }//printPermutation
41  }//Anagrams

4 个答案:

答案 0 :(得分:2)

更改

permutations[index] = permutations[currentIndex];

permutations[index] = argument[currentIndex];

premutation尚未预先填充,因此您始终将其分配给空字符。

将来做System.out.println("<"+myString+">");这样的事情会对这些问题有所帮助。

并改变

for (int index = 0; index < argument.length-1; index++)

for (int index = 0; index < argument.length; index++)

答案 1 :(得分:2)

不确定这是否是唯一的问题,但这条线看起来也不确定:

for (int index = 0; index < argument.length - 1; index++)

你的意思是不使用数组中的最后一个char吗?你可能意味着:

for (int index = 0; index <= argument.length - 1; index++)

for (int index = 0; index < argument.length; index++)

答案 2 :(得分:1)

它不打印任何东西的原因是因为for循环中的错误。尝试

for(int index = 0; index&lt; argument.length; index ++)

答案 3 :(得分:1)

我认为问题出在第11行&amp;你真的打算拥有;在条件结束时?

10  //if the character at that index hasn't been used       
11             if(!characterUsed[index]);

希望有所帮助..