蛇梯棋游戏createSnakes方法抛出NullPointerException异常排查求助
问题排查结果
空指针根本原因
- 随机位置生成逻辑返回了无效的节点编号:
getInitPosition()方法返回值范围是0 ~ dimension-1,但你的棋盘节点编号是从1到dimension,当随机到0时,get()方法会返回null,后续调用init.getSnakeTail()就会触发空指针异常。 - 蛇尾位置生成逻辑也存在同样问题:
endPosition = (int) (Math.random() * initPosition)当initPosition为1时,会生成0,导致end变量为null,调用end.getSnakeHead()时也会触发空指针。
修复方案
1. 修正随机位置生成方法
修改getInitPosition()方法,确保返回的位置在有效节点编号范围内(1~dimension-1,避免生成最后一个节点作为蛇头/梯子底部):
private int getInitPosition(){ // 生成1到dimension-1的整数 return (int) (Math.random()*(dimension - 1)) + 1; }
2. 修正蛇尾位置生成逻辑
在createSnakes()方法中修改endPosition的生成逻辑,确保蛇尾编号最小为1:
// 生成1到initPosition-1的整数作为蛇尾位置 int endPosition = (int) (Math.random() * (initPosition - 1)) + 1;
3. 可选优化(避免栈溢出)
你当前的重试逻辑是不符合条件就递归调用自身,如果棋盘剩余可用位置不足时会触发栈溢出,建议改成循环重试的方式替代递归重试。
内容的提问来源于stack exchange,提问作者JokerFever
相关产品推荐
相关产品推荐

