想要一个多维数组,但得到空指针异常
问题描述:
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行上做的事。有人知道为什么吗?想要一个多维数组,但得到空指针异常
答
现货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();
答
自从我看了Java以来,已经有一段时间了,但是您是否尝试过这么做呢?
board[0][0] = new hexagon(); // or whatever its constructor is
答
要扩大kwatford的说法,如果数组类型是一个对象,那么在java中初始化一个数组会给你一个空值。如果你有一个原始数组,比如一个双精度数组,你可以从0
开始,作为数组中每个元素的入口。
答
答案很简单:
由于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)
我记得两年前敲我的脑袋在桌子上这个确切的问题。我喜欢*
发布实际堆栈跟踪。 – 2010-07-30 01:31:28
同意。我们对六角形类型一无所知,什么。值意味着 –
Dan
2010-07-30 01:41:10
Wtf是.value?它不是VBA :) – 2010-07-30 12:37:03