0

这似乎是这里的一个常见问题,但对于我读过的所有问题,他们似乎处理不同的事情。

我正在编写一个带有管理不同类对象数组的主类的程序,并且我很难从主类中调用第二个类的 print() 方法。

Main 类尝试调用 Unit 类中的 print()。Unit 类看起来像这样:

public class Unit{

    static int numOfUnits = 0;
    public Unit[] units = new Unit[8];

    private int unitID;

//constructors are here

    public void print(){
    for (int i = 0; i < units.length; i++)
    System.out.print(units[i].unitID);
    }

    public void add(Unit unit){
    mobs[numbofUnits] = unit;
    numOfUnits++;
    }
}

所以我想要发生的是,通过 Main 类,我将新的 Unit 对象添加到单位数组中。当我完成添加它们时(使用 Main 类中的调用 unitToAdd.add(unitToAdd)),我想从 Main 中调用 Unit 的 print() 方法。

我不知道的是,是否以及在哪里使用static修饰符,如何引用print()方法本身中的变量(即我是否使用this.unitID,units[i]. unitID 等)等等。

让我感到困惑的是 print() 方法的本质。我的 setter 和 getter 工作得很好,因为我完全理解调用 specificUnit.setID() 正在更改该特定对象的特定变量,但我不知道如何让 print() 等方法工作。

谢谢!

4

2 回答 2

2

简单的答案 - 你需要一个Unit实例来调用print()。我强烈建议您回到基础知识 -学习 Java 语言

于 2011-08-15T17:49:51.703 回答
0

您可能应该避免UnitUnit. UnitList您可以通过创建一个类来存储您的单元列表(可能在 中)来完全避免静态状态ArrayList,然后创建一个对您的方法UnitList来说是本地的实例。main

public static void main(String[] argv) {
  UnitList myUnitList = new UnitList();
  myUnitList.add(new Unit(...));
  myUnitList.print();
}

这将跟踪一组单元的关注与单元本身分开,并避免了难以调试和单元测试的全局可变状态。

不过,要回答您的问题,下面是最小的更改集,并解释了为什么应该static或不应该进行更改。

public class Unit{

  // static here since every unit does not need to have a number of units.
  static int numOfUnits = 0;
  // static here since every unit does not need to contain other units.
  static Unit[] units = new Unit[8];

  // no static here since every unit does need its own ID.
  private int unitID;

  //constructors are here

  // static here since every unit does not need to know how 
  // to print a particular 8 units.
  public static void print(){
    for (int i = 0; i < numOfUnits; i++)
      System.out.print(units[i].unitID);
  }

  // static here since every unit does not need to know how
  // to add to a global list.
  public static void add(Unit unit){
    mobs[numbofUnits] = unit;
    numOfUnits++;
  }
}
于 2011-08-15T17:48:01.847 回答