gpt4 book ai didi

Java可变数组中的维数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:16 24 4
gpt4 key购买 nike

有没有一种方法可以创建维数可变的数组?

例如,

int x = 3;
// becomes
int[][][] array = new int[3][3][3];

//and
int y = 4;
//becomes
int[][][][] xray = new int[4][4][4][4];

我的示例如此间接的部分原因是因为我不知道人们会如何做这样的事情。

如果我有一个变量,我想创建一个与所述变量具有相同维数的数组

最佳答案

你不能直接这样做,但你可以用一维数组模拟它。

假设您有一个 3 行 4 列的二维数组。您可以将其实现为包含 12 个元素的数组,并编写一个 get 例程来获取 A[i,j] 元素,如下所示:

int[] A = new int[12];

int get(int i, int j) {
return A[4 * i + j];
}

当然你可以写一个set方法来以同样的方式设置数组的一个元素。

转到维度为 3x4x5 的 3 维数组,您可以执行类似的操作:

int[] A = new int[60];

int get(int i, int j, int k) {
return A[4*5*i + 5*j + k];
}

或 4 维 3x4x5x6 数组:

int[] A = new int[360];

int get(int i, int j, int k, int m) {
return A[4*5*6*i + 5*6*j + 6*k + m];
}

依此类推...您应该能够看到模式。

一旦您掌握了这一点,就应该不难为具有可变维数的数组编写类。 getset 方法可以为可变数量的索引采用 int... 参数,构造函数可以类似地采用 int... 指定维度。该类将有一个私有(private)的一维数组,其长度是所有维度的乘积。 getset 方法应该检查每个索引以确保它 >= 0 且小于相应的维度,否则抛出异常。

这就是“真正的”多维数组在大多数支持它们的语言中的实现方式(Java 不是其中之一;它只有一维数组,其元素可以是引用 到其他一维数组)。它被称为“行主要顺序”。参见 https://en.wikipedia.org/wiki/Row-_and_column-major_order了解更多信息(包括通用公式)。

关于Java可变数组中的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41993084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com