【问题标题】:How to call in a variable from an object?如何从对象中调用变量?
【发布时间】:2023-03-20 02:00:02
【问题描述】:

我不太清楚这个问题该怎么说,所以就这样吧。在一节课中,我有这个:

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

【问题讨论】:

  • 这种方式只能访问类变量。 programmerinterview.com/index.php/c-cplusplus/…
  • SIZE 是构造函数的局部变量。它在外面是不可见的。
  • 实际上,您似乎对实例变量的概念很熟悉(来自您的//instance variables 评论)。这对您来说应该不足为奇。
  • @Ben 在您提出的 14 个问题中,您只接受了一个答案。请花时间投票/接受您的问题的答案,以感谢那些捐赠空闲时间来帮助您的人。

标签: java class object methods call


【解决方案1】:

SIZE 变量将只存在于Board 构造函数中,当构造函数完成时它将不再存在,并且您只能在声明它之后从构造函数行访问它。

所以你需要将 SIZE 声明为类的属性,而不是局部变量。

【讨论】:

    【解决方案2】:

    试试:

    public class Board {
        // Static variables (also known as class variables)
        static int SIZE = 9;
    

    现在你可以在其他类中引用Board.SIZE

    查看有关“静态变量”或“类变量”的 Oracle 教程了解更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

    【讨论】:

      【解决方案3】:

      除了前面的答案:看看类变量板。 在构造函数中,class-var 被局部定义的变量 board 局部隐藏。 所以,如果你稍后访问类变量,你可能会因为类变量未初始化而感到困惑。

      【讨论】:

        【解决方案4】:

        由于您在构造函数中声明和初始化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]; 再次执行此操作。这些将是 2 个不同的变量,几乎可以肯定这不是您想要的。为了不造成这种混乱,您只需要在构造函数中初始化board,而不是重新声明它。在你的构造函数中改变

        char[][] board = new char [3][3];
        

        只是

        board = new char [3][3];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多