我正在使用JGrasp编写程序,其中tile是一个类。以下代码编译:
tile ext = new tile();
ext.assignValues(0);
g.setColor(ext.color);
g.fillRect(10+20, 35+20, 20, 20);
但以下情况并非如此:
tile[][] ext = new tile[1][1];
ext[0][0].assignValues(0);
g.setColor(ext[0][0].color);
g.fillRect(10+20, 35+20, 20, 20);
我是否错误地初始化2D数组,或者我误解了数组是如何工作的。
答案 0 :(得分:4)
ext[0][0]
未初始化为tile[][] ext = new tile[1][1];
是instances of tile
的数组(Object
在一般术语中)但您必须初始化存储在数组索引处的每个对象,然后才能将这些对象用作这里的每个元素的默认值都是null
。
tile ext[0][0]= new tile(); //Have to initialize it first
//And than use it in your code
我认为在编译期间你不会遇到任何问题,但是当你执行试图操纵NullPointerException
值的代码时它会抛出null
。
答案 1 :(得分:3)
您已初始化数组ext[][]
,但尚未初始化位置tile
中的[0][0]
。因此它是空的,并且尝试调用方法就像访问null值的方法一样。
tile[][] ext = new tile[1][1];
ext[0][0] = new tile();
ext[0][0].assignValues(0);
g.setColor(ext[0][0].color);
g.fillRect(10+20, 35+20, 20, 20);