置换和组合程序产生意外的输出

时间:2015-11-01 16:39:50

标签: java arrays permutation combinatorics

在考虑如何制作一个输出来自给定输入数组的所有可能组合的Java程序之后,我想了很长时间,我终于想到通过结合递归和迭代来实现这一点。

我的代码输入一个char数组{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

我无法理解为什么它给了我这个输出而不是所有组合。

1 个答案:

答案 0 :(得分:0)

问题在于,不是将i的值重新初始化为0,而是将i的值始终保留为3,并将i的递增值(即3)传递给进一步的递归调用。