我不明白这条语句到底错在哪里(是做Java的扫雷小游戏)

img


我不太明白这行代码错在哪里 一直没调试出来
这行代码是想获取随机索引 然后设置为雷

因为你的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,就不执行后面的代码。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632