【问题标题】:Get all indexes of a multidimensional table获取多维表的所有索引
【发布时间】:2018-01-31 13:28:46
【问题描述】:

我无法创建一个(递归)函数来打印多维表的所有可能索引。
我得到了关于多维数组的信息。
示例: int[]{6,6} 将是具有 6x6 = 36 个字段的二维表,因此结果将是 [0,0],[0,1],[1,1],[1,2],[2,2]... 等等。
另一个示例:
int[]{2,2,2} 将是具有 8 个可能索引的 3 维表:[0,0,0],[0,0,1],[0,1,1]... 等等
我正在尝试在 Java 7 中执行此操作。

编辑:根据要求,我到目前为止得到了什么。代码正在产生 OutOfBound 异常。

loop(new int[2], new int[]{6, 6}, 0);

  private void loop(int[] index, int[] dimensionSizes, int dimensionIndex) {
        if (index[dimensionIndex] < dimensionSizes[dimensionIndex] && dimensionIndex < dimensionSizes.length) {
            System.out.println(Arrays.toString(index));
            index[dimensionIndex] = index[dimensionIndex] + 1;
            if (index[dimensionIndex] < dimensionSizes[dimensionIndex]) {
                loop(index, dimensionSizes, dimensionIndex);
            } else {
                loop(index, dimensionSizes, dimensionIndex + 1);
            }
        }
    }

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: java arrays recursion java-7 dimensions


【解决方案1】:

我认为这段代码可以回答你的问题:

public static void printAllIndex(int[] dimensions) {
    int[] index = new int[dimensions.length];
    int stepNumber = 0;

    // Initialization
    for (int i : index) { index[i] = 0; }         // init index to 0
    for (int d : dimensions) { stepNumber += d; } // count number of iteration needed
    System.out.println(Arrays.toString(index));   // print first index [0,0,...]

    for(int s = 0; s <= stepNumber - 1; s++) {
        boolean allEquals = true;
        int value = index[index.length - 1];
        for (int i = index.length - 1; i >= 0; i--) {
            if(index[i] != value) {
                index[i]++;
                allEquals = false;
                break;
            }
        }
        if (allEquals) { index[index.length - 1]++; }
        System.out.println(Arrays.toString(index));
    }
}

【讨论】:

  • 谢谢,这正是我所需要的。
猜你喜欢
  • 2018-03-13
  • 2019-05-28
  • 2019-02-24
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2013-03-24
相关资源
最近更新 更多