Processing报错:变量赋值与代码顺序问题求助
问题分析与解决方案
错误原因拆解
全局变量未声明类型
Processing基于Java,全局变量必须显式声明类型,你直接写mainGame = new Gameboard(30,16);属于语法错误,编译器无法识别变量类型。构造函数局部变量遮蔽成员变量
Gameboard构造函数里的int[][] gameBoard = new int[w][h];是创建了一个局部变量,并没有给类的成员变量gameBoard赋值,导致后续调用方法时数组未初始化。缺少
generateMines()方法实现
代码中调用了mainGame.generateMines();,但Gameboard类里没有定义这个方法,会导致运行时错误。实例化位置的正确逻辑
即使把实例化移到setup里,也需要先在全局声明变量,再在setup内完成实例化,否则会出现作用域问题。
修复后的完整代码
class Gameboard { int gameWidth; int gameHeight; int[][] gameBoard; public Gameboard(int w, int h){ this.gameWidth = w; this.gameHeight = h; // 修复:给类成员变量赋值,而非创建局部变量 this.gameBoard = new int[w][h]; } // 补充缺失的generateMines方法,这里提供基础实现框架 public void generateMines(){ // 可在此添加扫雷的地雷生成逻辑 // 示例:先将数组初始化为0 for(int i=0; i<gameWidth; i++){ for(int j=0; j<gameHeight; j++){ gameBoard[i][j] = 0; } } } } int totalMines; boolean firstPlay; boolean gameWin; int lossX, lossY; // 全局声明mainGame变量,明确类型 Gameboard mainGame; void setup() { size(600,360); ellipseMode(CENTER); rectMode(CORNER); textSize(14); totalMines = 0; lossX = -1; lossY = -1; gameWin = false; // 在setup内完成实例化,确保Processing环境初始化后创建对象 mainGame = new Gameboard(30,16); mainGame.generateMines(); } void draw() { }
修复关键点说明
- 全局声明
Gameboard mainGame;,明确变量类型,符合Processing的语法规范。 - 修改构造函数的赋值逻辑,用
this.gameBoard指向类的成员变量,确保数组被正确初始化。 - 补充
generateMines()方法的基础实现,避免调用时出现方法未找到的错误。 - 将实例化代码移到setup函数内,保证在Processing完成窗口初始化后再创建游戏对象。
内容的提问来源于stack exchange,提问作者Owen Cai
相关产品推荐
相关产品推荐

