Java贪吃蛇游戏设置初始坐标数组出现NullPointerException求助
报错原因
你遇到的NullPointerException由Java引用类型数组的特性导致,和Coordinate类的默认构造逻辑无关:
- Java中使用
new Coordinate[20]创建引用类型数组时,仅会分配数组本身的存储空间,数组内所有元素的默认值都是null,不会自动为每个位置创建对应的Coordinate实例。 - 你直接访问
snakePosition[0].x时,snakePosition[0]本身是空值,调用属性就会触发空指针异常。
修复方案
方案1:仅初始化当前需要的数组位置
修改startPositionSnake方法,先给要用到的前两个数组位置实例化Coordinate对象,再修改坐标值即可:
void startPositionSnake() { // 先实例化数组元素对应的Coordinate对象 snakePosition[0] = new Coordinate(); snakePosition[0].x = 1; snakePosition[0].y = 0; snakePosition[1] = new Coordinate(); snakePosition[1].x = 0; snakePosition[1].y = 0; }
方案2:提前批量初始化所有数组位置
如果想要避免后续蛇身变长时重复实例化操作,也可以在Snake类的构造方法中提前给数组所有位置创建实例:
Snake() { lengthOfSnake = 2; // 批量初始化数组所有元素 for(int i = 0; i < snakePosition.length; i++){ snakePosition[i] = new Coordinate(); } }
采用这个方案的话,原有的startPositionSnake方法不需要修改即可正常运行。
内容的提问来源于stack exchange,提问作者ruben zwaan
相关产品推荐
相关产品推荐

