如何访问布尔数组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
。我只是测试了一下以确保。