如何根据Java中的输入确定数组的维度

时间:2013-07-12 16:16:04

标签: java multidimensional-array dynamically-generated

例如,我有一个输入N(直到运行时才知道),我想构建一个具有N维的数组。

我编写代码时无法定义维数,就像我们通常构建一个四维数组一样:

int [][][][] array = new int[3][3][3][3].  

我需要这个数组,因为我需要存储输入的维度是灵活的,这意味着在有人在运行时输入它之前你无法知道维度。

而且,在我构建这个数组之后,我怎样才能访问它?我不能像往常那样处理它

array[1][2][3][4] = 5

因为我在编写代码时不知道维度的数量。

我如何实现目标?

2 个答案:

答案 0 :(得分:0)

可能你不想这样做。几乎可以肯定有更好的方法来处理你想要做的事情。但是,这是一个可能有帮助的例子。

public class Arr {
        public static void main(String[] args)
        {
                int n = 7;
                int [][][][] foo = new int [n][n][n][n];
                foo[1][2][3][4] = 5;
                System.out.println(foo[1][2][3][4]);
        }

}

编辑: 啊!我现在知道了。您希望用户输入N并获取N维数组,而不是设置维度的比例。 这很棘手。您可以通过制作长度为d1 * d2 * ... * dN的数组来伪造它。例如,3X4的2D数组透明地是12的1D数组,而3X4X5数组只是60的数组。你想写一个类来处理所有这些 - 需要做一些工作,而你不会得到括号表示法的语法糖,但它是可行的。

答案 1 :(得分:0)

你需要这样的东西吗?

static Object[] getNArray(int n) {
    Object[] arr = new Object[n];
    for (int i = 0; i < n-1; i++) {
        arr[i] = getNArray(n - 1);
    }
    return arr;
}

public static void main(String[] args) {
    Object[] arr = getNArray(1);
    System.out.println(arr);

}