如何在Java类中使用数组?解决静态方法引用非静态字段错误
问题解决思路
你的问题核心是两个错误:静态方法无法直接访问非静态成员变量,以及构造函数里的局部变量覆盖了类成员变量。
1. 修复构造函数的变量覆盖问题
你在构造函数里写的String[][] board = new String[13][13];是局部变量,和类的成员变量board完全是两个东西,等于白初始化了成员变量。修改构造函数,直接操作成员变量:
public Game() { // 去掉String[][]声明,直接初始化类的成员变量 board = new String[13][13]; }
如果成员变量声明时已经做了new String[13][13]初始化,构造函数也可以留空,不过显式初始化更清晰。
2. 将静态方法改为非静态方法
makecross1是静态方法,静态方法属于类本身,不能直接访问属于对象实例的非静态成员变量。去掉static关键字,改成实例方法,就能直接使用类里的board成员变量,不用再传参数:
public void makecross1() { for (int i = 0; i < 13; i++) { for (int j = 0; j < 13; j++) { board[i][j] = " "; } } for (int i = 3; i < 10; i++) { for (int j = 5; j < 8; j++) { board[i][j] = "o"; board[j][i] = "o"; } } Random r = new Random(); while (true) { int x = r.nextInt(13); int y = r.nextInt(13); if (board[x][y].equals("o")) { board[x][y] = "/"; break; } } }
最终完整代码
import java.util.Random; public class Game { public String[][] board = new String[13][13]; public Game() { board = new String[13][13]; } public void makecross1() { for (int i = 0; i < 13; i++) { for (int j = 0; j < 13; j++) { board[i][j] = " "; } } for (int i = 3; i < 10; i++) { for (int j = 5; j < 8; j++) { board[i][j] = "o"; board[j][i] = "o"; } } Random r = new Random(); while (true) { int x = r.nextInt(13); int y = r.nextInt(13); if (board[x][y].equals("o")) { board[x][y] = "/"; break; } } } }
调用示例
现在不用传数组,直接创建对象调用方法即可:
Game game = new Game(); game.makecross1(); // 处理后的数组直接通过game.board访问
内容的提问来源于stack exchange,提问作者Yanoisa
相关产品推荐
相关产品推荐

