【问题标题】:Trying to print all combinations of an array but i have no output尝试打印数组的所有组合,但我没有输出
【发布时间】:2020-11-20 14:19:36
【问题描述】:

我正在尝试在数组大小 n 中打印大小为 r 的所有组合,但我没有输出。当我在eclipse中使用代码覆盖工具时,它显示:

  • 应该打印组合的我的 for 块 - 不运行。
  • 我的 for 块用所有可能的元素替换索引,循环体不运行

我花了几天时间试图完成这项工作,但我似乎无法理解为什么它不起作用。我究竟做错了什么? (这段代码是我从 GeeksforGeeks 写的)。

/*
* inputArray[] --> input array
* data[] --> Temporary array to store current combination
* start & end --> Starting and ending indexes in inputArray[]
* index --> Current index in data[]
* r --> Size of combination to be printed
-------------------------------------------------------------- */

package gfg;

public class Combination {
    static void combinationUtil(int inputArray[], int data[], int start,
                                int end, int index, int r) {
        //current combination is ready to be printed, print it.
        if (index == r) {
            for (int j = 0; j < r; j++) //BRANCH MISSED
                System.out.print(data[j] + " ");
            System.out.println(" ");
            return;
        }

        // replace index with all possible elements the condition 
        // end-i+1 >= index makes sure that including one element
        // at index will make a combination with remaining elements
        // at remaining positions
        for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
            data[index] = inputArray[i]; //BRANCH MISSED
            combinationUtil(inputArray, data, i + 1, end, index + 1, r);
        }
    }

    // print all combinations of size r in inputArray[] of size n
    static void printCombination(int inputArray[], int n, int r) {
        int data[] = new int[r]; //store combinations one by one
        //Print all combinations using temporary array 'data[]'
        combinationUtil(inputArray, data, n, 0, n - 1, r); 
    }

    // driver code
    public static void main(String[] args) {
        int inputArray[] = {1, 52};
        int r = 3;
        int n = inputArray.length;
        printCombination(inputArray, n, r);
    }
}

【问题讨论】:

    标签: java arrays combinations permutation


    【解决方案1】:

    这是你程序的执行流程:

    1. 使用 inputArray、n = 2 和 r = 3 调用 printCombination。
    2. 在 printCombination 中,创建了一个名为 data 长度为 r (3) 的空数组。
    3. combinationUtil 使用 inputArray、data、start = 2、end = 0、index = 1 和 r = 3 调用。
    4. 在 combineUtil 中,if(index == r) 被跳过,因为 index = 1 和 r = 3。
    5. for (int i=start; i&lt;=end &amp;&amp; end-i+1 &gt;= r-index; i++) 被跳过,因为 start 是 2 而 end 是 0。
    6. combinationUtil 将 void 返回给 printCombination。
    7. printCombination 将 void 返回给 main。
    8. 程序结束。

    我没有花时间检查您的程序实际上要做什么,但我希望您明白为什么您的程序没有打印任何内容。以后遇到此类问题时,我建议您像这样浏览您的程序,使用打印语句和调试器等工具来帮助您。

    【讨论】:

    • 我忘记了我已经改变了:if(index == r) 我只是在调试时这样做了,它应该是
    • 当你做 index
    猜你喜欢
    • 2021-10-01
    • 2017-08-24
    • 1970-01-01
    • 2016-09-02
    • 2014-05-05
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多