想要一个多维数组但获得空指针异常

oad*_*ams 1 java

  1 public class TestWin{
  2     public static void main(String[] args){
  3         int n;
  4         hexagon[][] board;
  5
  6         n = 4;
  7         board = new hexagon[n][n];
  8         board[0][0].value = 'R';
Run Code Online (Sandbox Code Playgroud)

你好.javac不喜欢我在第8行所做的.有谁知道为什么?

kwa*_*ord 10

我已经有一段时间了,因为我看了很多Java,但你有没有尝试过这样做?

board[0][0] = new hexagon(); // or whatever its constructor is
Run Code Online (Sandbox Code Playgroud)


bpe*_*ore 8

在kwatford上发现.您对第7行所做的就是告诉java为2维数组中的n*n六角形对象创建空间.

您仍然需要为每个六边形调用new

基本上,您需要用以下内容替换第7行:

board = new Hexagon[n][n];
for(int i=0; i<n; i++)
    for(int j=0; j<n; j++)
        board[i][j] = new Hexagon();
Run Code Online (Sandbox Code Playgroud)


six*_*ude 5

简答:

正如kwatford所说,你需要做的是:

board[0][0] = new hexagon(); // or whatever its constructor is
Run Code Online (Sandbox Code Playgroud)

更长的解释:

只是为了进一步扩大.你的2D阵列是; 指针数组(或Java中的引用).这是在此调用之后,数组的一行将立即显示的内容board = new hexagon[n][n];:

    0      1      2      3      4      5       // column index, row index = 0
-------------------------------------------
|   |   |   |   |   |   |      |      |      |    // value
--- | ----- | ----- | ---------------------
    |       |       |      ...
    |       |       |
    |       |       |
    |       |       |
    |       |       v
    |       |       Null
    |       v       
    |       Null
    v
    Null (This means that it points to nothing)
Run Code Online (Sandbox Code Playgroud)

你试过:

board[0][0].value = 'R';
Run Code Online (Sandbox Code Playgroud)

这与此相同:

null.value = 'R';
Run Code Online (Sandbox Code Playgroud)

您已使用以下行初始化了数组:

board = new Hexagon[n][n];
Run Code Online (Sandbox Code Playgroud)

但是您仍然需要初始化数组中的元素.这将初始化前三个:

board[0][0] = new hexagon(); // or whatever its constructor is
board[1][0] = new hexagon(); // or whatever its constructor is
board[2][0] = new hexagon(); // or whatever its constructor is
Run Code Online (Sandbox Code Playgroud)

这将导致一个如下所示的数组:

    0      1      2      3      4      5       // column index, row index = 0
-------------------------------------------
|   |   |   |   |   |   |      |      |      |    // value
--- | ----- | ----- | ---------------------
    |       |       |
    |       |       |
    |       |       |
    |       |       |
    |       |       v
    |       |       An instance of type Hexigoon (what you get when you type new Hexigon)
    |       v       
    |       An instance of type Hexigon (what you get when you type new Hexigon)
    v
    An instance of type Hexigon (what you get when you type new Hexigon)
Run Code Online (Sandbox Code Playgroud)

两年前,我记得用这个确切的问题把我的头撞在桌子上.我喜欢stackoverflow