2010-07-30 80 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