2010-07-30 78 views
0
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'; 

嗨。 javac不喜欢我在第8行上做的事。有人知道为什么吗?想要一个多维数组,但得到空指针异常

+2

发布实际堆栈跟踪。 – 2010-07-30 01:31:28

+0

同意。我们对六角形类型一无所知,什么。值意味着 – Dan 2010-07-30 01:41:10

+0

Wtf是.value?它不是VBA :) – 2010-07-30 12:37:03

回答

7

现货kwatford。第7行所做的全部工作就是告诉java为2维数组中的n * n个Hexagon对象创建空间。

您仍然需要为每个六边形

本质的调用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(); 
9

自从我看了Java以来​​,已经有一段时间了,但是您是否尝试过这么做呢?

board[0][0] = new hexagon(); // or whatever its constructor is 
1

要扩大kwatford的说法,如果数组类型是一个对象,那么在java中初始化一个数组会给你一个空值。如果你有一个原始数组,比如一个双精度数组,你可以从0开始,作为数组中每个元素的入口。

4

答案很简单:

由于kwatford说你需要做的是这样的:

board[0][0] = new hexagon(); // or whatever its constructor is 

更长说明:

只是为了进一步扩大。你的二维数组是;指针数组(或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) 

你试过:

board[0][0].value = 'R'; 

这是与此相同:

null.value = 'R'; 

您有初始化您使用此线阵:

board = new Hexagon[n][n]; 

但你仍然需要初始化您的数组中的元素。这将初始化三个第一:

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 

会导致其在一个数组,看起来像这样:

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) 

我记得两年前敲我的脑袋在桌子上这个确切的问题。我喜欢stackoverflow