2015-11-01 74 views
2

思想在相当长的时间,就如何使输出从给定的输入阵列中的所有可能的组合Java程序之后,我终于想到了通过组合递归和迭代这样做的。方案的排列组合产生意想不到的输出

我的代码需要输入字符数组{a,b,c}并应长度的所有可能的阵列的输出3.

我的代码是 -

public class Brute { 

    char[] val = new char[] { 'a', 'b', 'c' }; 

    void work(char arr[], int i) { 
     for (int j = 0; j <= 2; j++) { 
      if (i <= 2) { 
       arr[i] = val[j]; 
      } 
      while (i <= 2) { 
       i = i + 1; 
       if (i <= 2) { 
        work(arr, i); 
        System.out.println(new String(arr)); 
       } 
      } 
     } 
    } 

    public static void main(String args[]) { 
     Brute b = new Brute(); 
     char arr[] = new char[] { 'p', 'q', 'r' }; 
     b.work(arr, 0); 

    } 

} 

的输出是:

aaa 
aaa 
aaa 

我不明白为什么它给了我这个输出,而不是所有的组合。

+0

为什么你会初始化'arr'为'{ 'P', 'Q', 'R'}',因为要置换的数组实际上是'{ 'A', 'B', 'C'} '? –

+1

仅用于调试目的,以便我知道arr []实际上正在修改。 –

回答

0

的问题是,代替重新初始化的i至0 i的值始终保持为3的值和i的值递增(其3)被传递到进一步的递归调用。