获取多维table的所有索引
Get all indexes of a multidimensional table
我无法创建一个(递归)函数来打印多维的所有可能索引 table。
我得到了关于多维度的信息作为一个数组。
示例:
int[]{6,6}
将是具有 6x6 = 36 个字段的二维 table,因此结果将是 [0,0],[0,1],[1,1],[1,2],[2,2]...
等等。
另一个例子:
int[]{2,2,2}
将是一个 3 维 table,有 8 个可能的索引:[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);
}
}
}
我认为这段代码可以回答您的问题:
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));
}
}
我无法创建一个(递归)函数来打印多维的所有可能索引 table。
我得到了关于多维度的信息作为一个数组。
示例:
int[]{6,6}
将是具有 6x6 = 36 个字段的二维 table,因此结果将是 [0,0],[0,1],[1,1],[1,2],[2,2]...
等等。
另一个例子:
int[]{2,2,2}
将是一个 3 维 table,有 8 个可能的索引:[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);
}
}
}
我认为这段代码可以回答您的问题:
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));
}
}