Java 具有最小/最大数的数组索引的顺序倒计时

Java 具有最小/最大数的数组索引的顺序倒计时,java,arrays,Java,Arrays,我试图让我的应用程序得到一个随机数数组,并使用所有可能的rnd(1..8)组合。这些组合是一个索引数组(长度在2-99之间)。我已经模拟了一些测试代码来展示我到目前为止所做的,并在底部包含了我正在寻找的结果 为了成功地做到这一点,我们想看看函数 private static int[] updateArray(int[] array){ for (int index = array.length - 1 ; index >= 0; index--){ if (arr

我试图让我的应用程序得到一个随机数数组,并使用所有可能的rnd(1..8)组合。这些组合是一个索引数组(长度在2-99之间)。我已经模拟了一些测试代码来展示我到目前为止所做的,并在底部包含了我正在寻找的结果

为了成功地做到这一点,我们想看看函数

private static int[] updateArray(int[] array){
    for (int index = array.length - 1 ; index >= 0; index--){
        if (array[index] > 1){
            array[index]--;
            return array;
        } else if (array[index] == 1 && index != 0) {
            if (array[index - 1] != 1) {
                array[index - 1]--;
                array[index] = maxNum;
                return array;
            }
        }
        index--;
    }

    return array;
}
注意:我可能没有使用上述正确的算法

下面是编译结果的完整代码

public class Test {
    private static final int maxNum = 8;

    private static int[] updateArray(int[] array){
        for (int index = array.length - 1 ; index >= 0; index--){
            if (array[index] > 1){
                array[index]--;
                return array;
            } else if (array[index] == 1 && index != 0) {
                if (array[index - 1] != 1) {
                    array[index - 1]--;
                    array[index] = maxNum;
                    return array;
                }
            }
            index--;
        }

        return array;
    }

    private static boolean isArrayIndexesAllOnes(int[] array){
        for (int element: array){
            if (element != 1){
                return false;
            }
        }
        return true;
    }

    private static void printArrayCountdown(int[] array){
        boolean downToOne = false;

        while (!downToOne){
            array = updateArray(array);
            printArray(array);
            if (isArrayIndexesAllOnes(array)){
                downToOne = true;
            }
        }
    }

    private static void printArray(int[] array){
        for (int index = 0; index < array.length; index++){

            if (index == 0) {
                System.out.print("{" + array[index] + ",");
            } else if (index > 0 && index < array.length - 1){
                System.out.print(array[index] + ",");
            } else {
                System.out.println(array[index] + "}");
            }
        }
    }

    public static void main(String[] args) {
        int[] firstArray = {maxNum,maxNum};
        int[] secondArray = {maxNum,maxNum,maxNum};

        printArrayCountdown(firstArray);
        System.out.println();
        System.out.println();
        printArrayCountdown(secondArray);
    }
}
成功

但是,对于包含2个以上索引的数组(例如:
secondArray
),我得到以下输出:

{8,8,7}
{8,8,6}
{8,8,5}
{8,8,4}
{8,8,3}
{8,8,2}
{8,8,1}
{8,7,8}
{8,7,7}
{8,7,6}
{8,7,5}
{8,7,4}
{8,7,3}
{8,7,2}
{8,7,1}
{8,6,8}
{8,6,7}
{8,6,6}
{8,6,5}
{8,6,4}
{8,6,3}
{8,6,2}
{8,6,1}
{8,5,8}
{8,5,7}
{8,5,6}
{8,5,5}
{8,5,4}
{8,5,3}
{8,5,2}
{8,5,1}
{8,4,8}
{8,4,7}
{8,4,6}
{8,4,5}
{8,4,4}
{8,4,3}
{8,4,2}
{8,4,1}
{8,3,8}
{8,3,7}
{8,3,6}
{8,3,5}
{8,3,4}
{8,3,3}
{8,3,2}
{8,3,1}
{8,2,8}
{8,2,7}
{8,2,6}
{8,2,5}
{8,2,4}
{8,2,3}
{8,2,2}
{8,2,1}
{8,1,8}
{8,1,7}
{8,1,6}
{8,1,5}
{8,1,4}
{8,1,3}
{8,1,2}
{8,1,1}
{7,1,1}
{6,1,1}
{5,1,1}
{4,1,1}
{3,1,1}
{2,1,1}
{1,1,1}
逻辑错误

相反,这里是预期输出

{8,8,7}
{8,8,6}
{8,8,5}
{8,8,4}
{8,8,3}
{8,8,2}
{8,8,1}
{8,7,8}
{8,7,7}
{8,7,6}
{8,7,5}
{8,7,4}
{8,7,3}
{8,7,2}
{8,7,1}
{8,6,8}
{8,6,7}
{8,6,6}
{8,6,5}
{8,6,4}
{8,6,3}
{8,6,2}
{8,6,1}
{8,5,8}
{8,5,7}
{8,5,6}
{8,5,5}
{8,5,4}
{8,5,3}
{8,5,2}
{8,5,1}
{8,4,8}
{8,4,7}
{8,4,6}
{8,4,5}
{8,4,4}
{8,4,3}
{8,4,2}
{8,4,1}
{8,3,8}
{8,3,7}
{8,3,6}
{8,3,5}
{8,3,4}
{8,3,3}
{8,3,2}
{8,3,1}
{8,2,8}
{8,2,7}
{8,2,6}
{8,2,5}
{8,2,4}
{8,2,3}
{8,2,2}
{8,2,1}
{8,1,8}
{8,1,7}
{8,1,6}
{8,1,5}
{8,1,4}
{8,1,3}
{8,1,2}
{8,1,1}
{7,8,8}
{7,8,7}
{7,8,6}
{7,8,5}
{7,8,4}
{7,8,3}
{7,8,2}
{7,8,1}
{7,7,8}
{7,7,7}
{7,7,6}
{7,7,5}
{7,7,4}
{7,7,3}
{7,7,2}
{7,7,1}
{7,6,8}
{7,6,7}
{7,6,6}
{7,6,5}
{7,6,4}
{7,6,3}
{7,6,2}
{7,6,1}
{7,5,8}
{7,5,7}
{7,5,6}
{7,5,5}
{7,5,4}
{7,5,3}
{7,5,2}
{7,5,1}
{7,4,8}
{7,4,7}
{7,4,6}
{7,4,5}
{7,4,4}
{7,4,3}
{7,4,2}
{7,4,1}
{7,3,8}
{7,3,7}
{7,3,6}
{7,3,5}
{7,3,4}
{7,3,3}
{7,3,2}
{7,3,1}
{7,2,8}
{7,2,7}
{7,2,6}
{7,2,5}
{7,2,4}
{7,2,3}
{7,2,2}
{7,2,1}
{7,1,8}
{7,1,7}
{7,1,6}
{7,1,5}
{7,1,4}
{7,1,3}
{7,1,2}
{7,1,1}
{6,8,8}
{6,8,7}
{6,8,6}
{6,8,5}
{ect...}
{1,1,1}
有没有办法让这种行为发生

注意:我不想实际打印出
{ect…}
,为了不在这个问题上增加512行,我只删掉了大约400行


谢谢:)

我要感谢anishthecoder的回复,因为它确实帮助我缩小了范围。基本上,我只需要删除
索引--
(如他所说),然后添加一个额外的for循环。请参阅下面的代码

private static int[] updateArray(int[] array){
    for (int index = array.length - 1 ; index >= 0; index--){
        if (array[index] > 1){
            array[index]--;
            return array;
        } else if (array[index] == 1 && index != 0) {
            if (array[index - 1] != 1) {
                array[index - 1]--;
                for (int i = index; i < array.length; i++){
                    array[i] = maxNum;
                }
                return array;
            }
        }
    }

    return array;
}
private static int[]updateArray(int[]数组){
对于(int index=array.length-1;index>=0;index--){
if(数组[索引]>1){
数组[索引]--;
返回数组;
}else if(数组[索引]==1&&index!=0){
if(数组[索引-1]!=1){
数组[索引-1]-;
for(int i=index;i
我相信有一种更干净的方法可以做到这一点,我很乐意为任何能想出更干净解决方案的人提供答案。现在这是工作


再次感谢AnishtCoder:)

删除
更新路径中的
索引--
,它应该可以解决问题。不,快关!但是不,它在
{8,1,1}和{7,8,1}
之间跳过。。。和
{7,1,1}和{6,8,1}
。。。诸如此类
private static int[] updateArray(int[] array){
    for (int index = array.length - 1 ; index >= 0; index--){
        if (array[index] > 1){
            array[index]--;
            return array;
        } else if (array[index] == 1 && index != 0) {
            if (array[index - 1] != 1) {
                array[index - 1]--;
                for (int i = index; i < array.length; i++){
                    array[i] = maxNum;
                }
                return array;
            }
        }
    }

    return array;
}