如何从对象中调用变量?

时间:2014-11-26 20:58:48

标签: java class object methods call

我不太确定如何说出这个问题,所以就这样吧。在一堂课中,我有这个:

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?谢谢!

4 个答案:

答案 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];