我不太确定如何说出这个问题,所以就这样吧。在一堂课中,我有这个:
public class Board {
//instance variables
private char BLANK = '_';
private char[][] board;
public Board(){
int SIZE = 9;
char[][] board = new char [3][3];
for (int i=0; i<board.length; i++){
for (int j=0; j<board[i].length; j++){
board[i][j] = BLANK;
}
}
}
}
而在另一个(省略'class'标签):
public int getComputerSpot(){
int nbr = r.nextInt(Board.SIZE)+1;
while (!board.isAvailable(nbr)){
nbr = r.nextInt(Board.SIZE)+1;
}
return nbr;
}
找不到Board.SIZE;它说它找不到变量。缺少什么,或者我如何确保它能找到Board.SIZE?谢谢!
答案 0 :(得分:1)
SIZE
变量只存在于Board
构造函数中,当构造函数完成时它将不复存在,并且只能在声明它之后才能从构造函数行访问它。
所以你需要的是将SIZE声明为类的属性,而不是局部变量。
答案 1 :(得分:1)
尝试:
public class Board {
// Static variables (also known as class variables)
static int SIZE = 9;
现在您可以从其他课程中引用Board.SIZE
。
查看这个关于&#39;静态变量的Oracle教程&#39;或者&#39;类变量&#39;有关更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
答案 2 :(得分:1)
除了之前的答案:看一下类变量板。 在构造函数中,class-var由本地定义的变量板本地隐藏。 因此,如果稍后访问类变量,可能会因为类变量未初始化而感到困惑。
答案 3 :(得分:0)
由于您在构造函数中声明并初始化SIZE
,因此它是唯一可见的位置。您需要将其声明为类变量。要以您显示的方式(Board.SIZE
)访问它,您需要将其设为公共变量。如果你想让它像其他人一样私有,你需要制作像getSize()
这样的getter方法,然后返回那个私有变量。此外,您似乎试图直接从类本身获取变量,而不是从该类的对象获取变量。在这种情况下,您还需要将变量设置为静态。
公开版
public class Board {
public static int SIZE = 9
public Board() {
// remove "int SIZE = 9" from your constructor
}
}
私人版
public class Board {
private static int SIZE = 9
public Board() {
// remove "int SIZE = 9" from your constructor
}
public int getSize() { return SIZE; }
}
旁注:
你已经在类级别private char[][] board;
声明了一个变量,然后在你的构造函数中,你在char[][] board = new char [3][3];
再次进行了。这些将是两个不同的变量,几乎肯定不是你想要的。为了不产生这种混淆,你只需要在构造函数中初始化board
,而不是重新声明它。在构造函数中更改
char[][] board = new char [3][3];
到
board = new char [3][3];