【问题标题】:Java, operations with an array of objectsJava,对对象数组的操作
【发布时间】:2016-04-16 16:29:45
【问题描述】:

我想将玩家的数据和场地的数据存储在两个对象数组中。问题是我需要在不同的课程中使用这些。在我最初创建的类中,它不是问题,但是当我尝试在另一个类中调用它时,它会抛出“board[i] 无法解析为变量”。

我写的代码有点像这样:

class Field {
    int something;
    int another;

    public void setMethod(int something){
        this.something = something;
    } 

    //etc. 
}

class Board {
public static Field[] board = new Field[60];

    public void BoardFiller(){
        for(int i = 0; i < board.length; i++){
            board[i] = new Field(/*construct*/);
            //etc.
        }
    }
}

class Gameplay {
    public boolean Attackable() {
        boolean atk = false;

        //stuff
        int something = board[i].getMethod();
        //more stuff
        return atk;
    }
}

等等。我必须使用字段数据来检查它是否可以访问,在 I/O 部分轮流使用它。 玩家数据也有同样的问题。

【问题讨论】:

  • 你必须通过它定义的类来引用你的静态变量。换句话说:Board.board[i]

标签: java arrays class object


【解决方案1】:

第 1 步:从 board 变量中删除 static 修饰符

第 2 步:将 public Board board = new Board(); 字段添加到 Gameplay 类

第 3 步:使用 board.board[...] 访问 Gameplay 类中的字段

【讨论】:

  • "Step 0" 向GamePlay添加一个方法,因为它是无效的
  • k 这种方法也有效。我只是让他也将归档类设为静态。 bt 这种方式是对的,因为他是从字段类调用方法
【解决方案2】:

就像您使用 new Field() 创建一个字段对象一样,您需要在游戏类中创建一个棋盘对象才能使用其中的方法。

Board myBoard = new Board();

【讨论】:

    【解决方案3】:

    您尚未在Attackable 方法或Gameplay 类的范围内定义board 变量。为了访问board 变量,您必须通过Field.Board.board 访问它。而不仅仅是board。

    【讨论】:

      【解决方案4】:

      在 GamePlay 类中,您必须在棋盘上循环。类似于 for(Field f : new Board().board) //做一些事情

      【讨论】:

        【解决方案5】:

        代码完全错误它甚至不会编译你不允许创建 内部类中外部类的静态数组

        内部类是不显式或隐式的嵌套类 声明为静态的。内部类不能声明静态初始化器 或成员接口。内部类不能声明静态 成员,除非它们是编译时常量字段

        您应该得到一个编译错误,您可以通过将字段类设为静态来解决此问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-30
          • 2021-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多