我正在研究一个ASCII检查器程序,我正在试图弄清楚我应该如何存储我的电路板状态。显然我需要一个2d int / short数组(对于状态'black','white','empty'),但我不知道如何声明这个,所以它可以从程序中的任何地方访问,比如我可能需要。
在我过去使用的过程语言中,全局变量很容易,但显然Java中的全局变量是一种非常糟糕的做法。另外,我在一个java文件的约束下工作,所以我不知道这是否限制了我的选择。我在NetBeans工作,对于这个任务,它应该是一个.java文件。
现在我只是在我班级的主要方法之前使用public static int[][] checkersBoard;
。我很确定这是不好的做法,但
谢谢!
P.S。这是一个额外的问题,这就是为什么我没有被教导如何做到这一点:P
答案 0 :(得分:1)
OO语言中有一个常用的中间层,它是一个实例变量。事实上,这是OO语言的一个特色,它们使它们如此强大。
您可以设计自己的课程,只需拥有public int[][] board
,从操作游戏状态的所有方法中删除static
修饰符。
如果您的类名为CheckerGame
,则可以在main方法中实例化new CheckerGame()
,并在其上调用方法。以下非感性示例应该让您入门:
public class CheckerGame {
public int[][] board;
public int getBoard(int row, int col){
return board[row][col];
}
public void setBoard(int row, int col, int val){
board[row][col] = val;
}
public CheckerGame(){ board = new int[8][8];
public static void main(String... argv){
CheckerGame game = new CheckerGame();
game.setBoard(1,2,0);
}
}
然后,您可以添加新方法来操作实例(例如moveChecker和checkWin),允许您重用和组织功能。
答案 1 :(得分:1)
全局变量的问题只出现在较大的项目中,在这些项目中,很难跟踪哪些代码行触及全局状态以及按什么顺序排列。
由于你只有一个课程,这不会造成麻烦,因为该变量在技术上甚至不是全局的:你可以根据需要设置private
。
有了这么小的例子,很难证明非静态变量的合理性。基本上,你的任务太小,无法让你观察到OOP的好处。