Java 在n维数组上迭代

Java 在n维数组上迭代,java,arrays,loops,iteration,multidimensional-array,Java,Arrays,Loops,Iteration,Multidimensional Array,如何迭代n维数组(n未知) 我找到了C++的结果,其中一个简单地运行数组的内存区域,但是我不知道我是否可以用java来做。< /p> < p>我在别的地方找到了这个。对于您的问题,这是一个非常好的递归解决方案: interface Callback { void visit(int[] p); // n-dimensional point } void visit(int[] bounds, int currentDimension, int[] p, Callback

如何迭代n维数组(n未知)


<>我找到了C++的结果,其中一个简单地运行数组的内存区域,但是我不知道我是否可以用java来做。< /p> < p>我在别的地方找到了这个。对于您的问题,这是一个非常好的递归解决方案:

 interface Callback {
       void visit(int[] p); // n-dimensional point
    }

void visit(int[] bounds, int currentDimension, int[] p, Callback c) {
   for (int i = 0; i < bounds[currentDimension]; i++) {
        p[currentDimension] = i;
        if (currentDimension == p.length - 1) c.visit(p);
        else visit(bounds, currentDimension + 1, p, c);
   }
}

visit(new int[] {10, 10, 10}, 0, new int[3], new Callback() {
   public void visit(int[] p) {
        System.out.println(Arrays.toString(p));
   }
});
接口回调{
无效访问(int[]p);//n维点
}
无效访问(int[]边界,int currentDimension,int[]p,回调c){
对于(int i=0;i
在C/C++中,多维数组(
int[][]
)在内存中以平面方式表示,索引运算符被转换为指针算术。这就是为什么用这些语言很容易做到这一点

然而,Java中的情况并非如此,多维数组是数组的数组。当严格检查类型时,数组数组中的索引将生成数组类型,而不是内部数组包含的类型

因此,我们要回答这个问题:不,在Java中不能像在C/C++中那样简单地做到这一点。


要做到这一点,请参见其他答案:-)

这可以满足您的需要:

公共接口元素处理器{
无效过程(对象e);
}
公共静态void iterate(对象o,elementp){
int n=Array.getLength(o);
对于(int i=0;i
然后,在呼叫时:

//将对n维数组的每个元素调用process方法
ElementProcessor p=新的ElementProcessor(){
@凌驾
公共作废流程(对象e){
//例如,只需记录日志即可
系统输出打印ln(e);
}
};
int[]a1=新的int[]{1,2};
int[][]a2=newint[][]{newint[]{3,4},newint[]{5,6}};
迭代(a1,p);
迭代(a2,p);
这张照片是:

1
2.
3.
4.
5.
6.

什么是
变量维数组
?我想我不理解你的问题,但这里是:我有一个N^N的向量,其中每个条目从0到xn。然而,我不知道前面有多少n,我需要一种方法来迭代所有这些可能的向量。大家好@user2270119,通常认为勾选一个适合您的问题的答案。这看起来不错,似乎是一个很好的解决方案,但我对效率感兴趣,一般来说,递归并不是解决方法。真的没有别的办法吗?(我想不出有什么)@user2270119在尝试了几件事情之后,我还没有找到任何其他不使用递归的解决方案。。。恐怕你别无选择。如果您找到另一个,请告诉我:)