java 赋值自定义对象数组 NullPointerException 异常

我正在开发一个五子棋游戏,里面要创建一个自定义对象的二维数组,我用了许多方法,总是出现NullPointerException异常。主要代码如下:publicclassC... 我正在开发一个五子棋游戏,里面要创建一个自定义对象的二维数组,我用了许多方法,总是出现NullPointerException异常。
主要代码如下:
public class Chessboard {
int width; //宽度
int height; //高度
int left; //左边距
int top; //上边距
int gridwidth; //方形网格宽度
Piece[][] pieces; //二维数组,表示棋盘上的棋子
Graphics graphics; //需要绘制的图形上下文对象
public Chessboard(int left,int top,int width,int height,int gridwidth){ //构造方法
this.width=width;
this.height=height;
this.left=left;
this.top=top;
this.gridwidth=gridwidth;
for(int x=0;x<=width;x++){
for(int y=0;y<=height;y++){
pieces[x][y]=new Piece(x,y,""); //遍历数组,为其赋值
}
}
}

注:Piece类已正确定义。
于是我在网上搜索这个异常的解决方法,搜索到一个类似的已解决问题:http://zhidao.baidu.com/question/405660838.html
可是我发现,这个问题并不适合为我作参考。因为给pieces[][]赋值需要构造方法中的参数(x,y等),它的长度由x和y参数而定,而不是在定义成员变量的地方直接给它初始化赋值,因为还不能确定它的长度嘛。
这个问题令我纠结,因为如果采用其它方式表示棋子,改动它对于我的几千行代码来说可是个大工程。My God呀,妈妈咪呀,谁能拯救濒临困境的我!
我把Piece[][] pieces改成了Piece[][] pieces = new Piece[100][100],结果成功了,果然是因为没让系统分配空间的原因。可是我并不希望一开始就指定Piece[100][100]呀。
展开
 我来答
千锋教育
2015-12-18 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
对象数组不会自动初始化,才会NullPointerException 异常,所以要对每个元素初始化。
如:
JField []txt=new JField[4]; ------这里只是new了一个对象数组,并没有初始化数组元素

txt[0]=new JField();-------------因为对象数组不会自动初始化,所以要对每个元素初始化。

而平常见到的int、double等类型是基本数据类型,对于基本数据类型的数组,如果没有人为初始化,那么系统会自动初始化。
hyjiacan
推荐于2018-03-15 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1082万
展开全部
在for 循环前面加上 pieces = new Piece[width][height]
报空指针应该是因为你没有告诉系统你要申请多大空间的数据,系统就没给你分配空间,没分配空间就找不到,找不到就空指针了。
更多追问追答
追问
试了一下……
居然发现了又一个异常~~~~~java.lang.ExceptionInInitializerError~~~~~
请问是何方异常?
追答
哪里报的错 ?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuchongqi2012
2012-07-09 · TA获得超过113个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:123万
展开全部
在你for里初始化下
pieces = new Piece[width][height]
我看到你下面说的报个数组越界异常时因为

for(int x=0;x<=width;x++){
for(int y=0;y<=height;y++){
pieces[x][y]=new Piece(x,y,""); //遍历数组,为其赋值
}
}

这个循环 下标是从0开始的 结束要到你的width-1和height-1
要不你初始化时定pieces = new Piece[width+1][height+1]
追问
嗯,谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9c57ed1
2018-03-15 · TA获得超过120个赞
知道答主
回答量:95
采纳率:89%
帮助的人:23.4万
展开全部
你的构造方法里面没有对数组的初始化
还有把你的等于去掉 长度为5的数组下标只能到4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
的东情1
2012-07-09
知道答主
回答量:47
采纳率:0%
帮助的人:30.1万
展开全部
Piece[][] pieces=null;
int height=0;
int width=0;
//可以需要时修改heigh,width

pieces=new Piece[height][width];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式