java—尝试打印数组的所有组合,但没有输出

l7mqbcuq  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(331)

我试图打印数组大小n中大小r的所有组合,但没有输出。当我在eclipse中使用代码覆盖工具时,它显示:
我的for块应该打印组合-不运行。
对于用所有可能的元素替换索引的块,循环体不会运行
我已经花了几天的时间试图让这个工作,我只是不明白为什么它不工作。我做错什么了(这段代码是我从Geeksforgeks写的)。

/*

* 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
            combinationUtil(inputArray, data, n, 0, n-1, r); //Print all combinations using temporary array 'data[]'
        }

        // driver code
        public static void main(String[] args) {

            int inputArray[] = {1,52};
            int r = 3;
            int n = inputArray.length;  
            printCombination(inputArray, n, r) ;    
        }
}
ndh0cuux

ndh0cuux1#

这是程序的执行流程:
使用inputarray调用printcombination,n=2,r=3。
在printcombination中,生成一个称为长度为r(3)的数据的空数组。
使用inputarray、data、start=2、end=0、index=1和r=3调用combinationutil。
在组合中, if(index == r) 跳过,因为索引=1和r=3。 for (int i=start; i<=end && end-i+1 >= r-index; i++) 跳过,因为开始为2,结束为0。
combinationutil将void返回到printcombination。
printcombination返回void到main。
节目结束。
我没有花时间检查你的程序实际上在做什么,但我希望你明白为什么你的程序没有打印任何东西。当您将来遇到这样的问题时,我建议您使用诸如print statement和debugger之类的工具来帮助您完成这样的程序。

相关问题