如何访问布尔数组Java
我有下面的构造函数,它定义了一个如何访问布尔数组Java,java,Java,我有下面的构造函数,它定义了一个板,并检查三个按钮中是否有一个被点击: Timer timer = new Timer(500, this); private boolean[][] board; private boolean isActive = true; private int height; private int width; private int multiplier = 40; JButton button1; JButton button2; JButton button
板
,并检查三个按钮
中是否有一个被点击:
Timer timer = new Timer(500, this);
private boolean[][] board;
private boolean isActive = true;
private int height;
private int width;
private int multiplier = 40;
JButton button1;
JButton button2;
JButton button3;
public Board(boolean[][] board) {
this.board = board;
height = board.length;
width = board[0].length;
setBackground(Color.black);
button1 = new JButton("Stop");
add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isActive = !isActive;
button1.setText(isActive ? "Stop" : "Start");
}
});
button2 = new JButton("Random");
add(button2);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = randomBoard();
}
});
button3 = new JButton("Clear");
add(button3);
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = clearBoard();
}
});
}
但它返回以下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
board cannot be resolved or is not a field
board cannot be resolved or is not a field
为什么会这样?如何访问构造函数中的此.board
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = randomBoard();
}
});
您的按钮2
是一个JButton
,它没有板
字段。不要使用此.board访问它。找到另一种方法访问板
快速而肮脏的方法是将board
设置为静态,但我确信JButton
有一种方法可以让您指定父级(您的board类),并以这种方式访问board
字段
在快速查看之后,我找到了一个方法。我从那开始。问题就在这里
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = randomBoard();
}
});
您的按钮2
是一个JButton
,它没有板
字段。不要使用此.board访问它。找到另一种方法访问板
快速而肮脏的方法是将board
设置为静态,但我确信JButton
有一种方法可以让您指定父级(您的board类),并以这种方式访问board
字段
在快速查看之后,我找到了一个方法。我从那开始。问题是由于您试图访问匿名内部类中的this.board
而引起的。由于未定义板
字段,因此会导致错误
例如:
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = randomBoard();
}
});
为了能够在匿名内部类中使用board
变量,您需要删除this
或使用类似board.this.board
(如果您想更明确的话)。问题是由于您试图访问匿名内部类中的this.board
引起的。由于未定义板
字段,因此会导致错误
例如:
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
this.board = randomBoard();
}
});
为了能够在匿名内部类中使用board
变量,您需要删除this
或使用类似board.this.board
(如果您想更明确的话)。正如其他人和编译器所说,您没有字段(这是一个),只有一个board,构造函数一退出,它就超出范围。正如其他人和编译器所说,您没有字段(是),只有一块板,构造函数一退出,它就超出范围。这应该可以:
Board.this.board = randomBoard();
问题是此
与没有板变量的ActionListener类相关。但是,对于Board。此
指定您指的是Board类的Board成员。这是嵌套类访问外部类变量时需要使用的语法。这应该可以:
Board.this.board = randomBoard();
问题是此
与没有板变量的ActionListener类相关。但是,对于Board。此
指定您指的是Board类的Board成员。这是嵌套类访问外部类变量时需要使用的语法。您在哪里定义了board
?您在哪里定义了board
?从非静态内部类(即使是匿名类)只要删除This
(所以只需使用board=randomBoard();
)@Heuster:只有当board参数是final时,这才有效。但是他不能给它赋值。@mszalbach我认为字段不需要是final。final只适用于局部变量的情况,这样当方法存在时它们就不会从堆栈中弹出。@Cemre:需要是final的字段不是字段,而是传入的参数构造函数。因为这是您在删除this before board时要访问的内容。要访问board字段,只需使用board.this.board即可。@mszalbach对于作为参数传递的情况,是的,您可能需要将其设置为最终值。但在这种情况下,只需删除this
,因为没有其他>board
变量匿名内部类定义。您不必使用board.this.board
。我只是进行了测试以确保。从非静态内部类(即使是匿名类)您只需访问外部类的成员变量,只要您删除此
(因此只需使用board=randomBoard();
)@Heuster:只有当board参数是final时,这才有效。但是他不能给它赋值。@mszalbach我认为字段不需要是final。final只适用于局部变量的情况,这样当方法存在时它们就不会从堆栈中弹出。@Cemre:需要是final的字段不是字段,而是传入的参数构造函数。因为这是您在删除this before board时要访问的内容。要访问board字段,只需使用board.this.board即可。@mszalbach对于作为参数传递的情况,是的,您可能需要将其设置为最终值。但在这种情况下,只需删除this
,因为没有其他>board
匿名内部类定义的变量。您不必使用board.this.board
。我只是测试了一下以确保。