因为你的size是0,list中没有元素,所以list.get(0) 导致list访问越界了,程序就崩了。
应该是你的逻辑有问题,list中没有数据,26~19行的双层for循环中,list.add()函数没有执行,block.length 应该是0了。
问题根本原因:
根据你之前私信问我的initBlock()函数来看,你在initBlock函数中只是设置了block中元素的属性(因为有for循环判断,所有block[i][j]这么用没有报错),并没有为block分配空间,应该是传入layMinesForBlock()函数的block你没有给它分配空间!!!你需要在调用layMinesForBlock()函数前,为block分配空间才行。
报错的这个地方修改方法参考如下:
while (mineNum > 0) {
int size = list.size();
int randomindex = (int)(Math.random() * size);
if (size > 0) {
Block a = list.get(randomindex);
a.setIsMine(true); a.setName("雷");
a.setMineIcon(mineIcon);
list.remove(randomindex);
}
mineNum--:
}
报错意思是集合长度为0,不存在元素,所以get报错。
31行获取集合长度后,判断一下长度是否大于0,如果小于等于0,就不执行后面的代码。