所以我有这段代码声明一个三维数组:
"SELECT *
FROM accounts a
INNER JOIN reverification_trackers rt ON rt.account_id = a.id
LEFT JOIN verifications v ON v.account_id = a.id
WHERE v.account_id IS NULL
AND a.level = -20
在类的构造函数中,n使用值初始化(让' s表示3)。
问题是当我尝试访问矩阵的一个元素时(让我们说矩阵[0] [0] [0])我得到一个" ArrayIndexOutOfBoundsException"。
似乎我的矩阵长度为0。
但如果我尝试这样的话:
public class Matrix {
private static int n;
char[][][] matrix = new char[n][n][2];
Matrix(int n){
n=3;
} }
它工作正常,内存被分配给矩阵。
另外,在我的程序中,我在某些时候使用了这样的东西:
char[][][] matrix = new char[3][3][2]
也像魅力一样,我也可以访问这个元素。
这是为什么?我不允许使用变量?
指定三维矩阵的维数答案 0 :(得分:2)
您可以使用变量定义数组的大小。但是,你的构造函数来自之后你已经初始化了数组,并且当数组被初始化时,' n'是0.请记住,一旦创建,数组大小就不能更改。相反,您应该在构造函数中初始化数组。
public class Matrix {
private static int n;
char[][][] matrix;
Matrix(int num){
n = num;
matrix = new char[n][n][2];
}
}
答案 1 :(得分:0)
必须先初始化n
的值,然后才能指定数组的大小。
这是一个包含多个大小数组的简单类。
class Matrix {
private int width, height, depth;
private char[][][] matrix;
public Matrix(int width, int height, int depth) {
matrix = new char[height][width][depth];
}
public void set(int i, int j, int k, char value) {
matrix[i][j][k] = value;
}
public char get(int i, int j, int k) {
return matrix[i][j][k];
}
}
样品运行
class Main {
public static void main(String[] args) {
Matrix m = new Matrix(2, 2, 2);
m.set(0, 0, 0, 'c');
System.out.println(m.get(0, 0, 0)); // c
}
}