为什么我不能在Java中使用变量声明三维数组?

时间:2016-02-29 20:15:40

标签: java arrays matrix

所以我有这段代码声明一个三维数组:

"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]

也像魅力一样,我也可以访问这个元素。

这是为什么?我不允许使用变量?

指定三维矩阵的维数

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
  }
}