如何为每个班级的计数而不是每个班级的实例计数

时间:2017-05-19 20:31:10

标签: java static

我有:

  • 界面 - ISpacecraft
  • 抽象类 - Spacecraft(实现上面的界面)
  • 课程 - 4种船(航天器的衍生儿童)

任务:返回每艘船的计数,如果我有2艘货船,则返回2.

问题:当我遍历ArrayList时,它会打印' 2'两次,因为我有2艘货船。

预期输出: 2,1,1,2

当前输出: 2,2,1,1,2,2

问题:如何迭代船舶类型的数量而不是所有船只的实例?

注意:我无法更改' printInstanceNumberPerClass'的签名。

代码:

StarFleetManagerTester

public static void printInstanceNumberPerClass (ArrayList<ISpacecraft> fleet) 
{
    ArrayList<ISpacecraft> objects = new ArrayList<>(fleet);
    ArrayList<Integer> cnt = new ArrayList<Integer>();

    for(ISpacecraft obj : objects)
    {
        cnt.add(obj.getCount());
    }
    for(ISpacecraft obj : objects)
        System.out.println(obj.getCount() +"  "+obj.getName());
}

航天器

protected static int countCruiser;

ISpacecraft

int getCount();

cargoShip,ReserarchShip等..

private static int count
@Override
    public int getCount() {
        return this.count;
    }

1 个答案:

答案 0 :(得分:1)

您可以像这样定义名为String的{​​{1}}成员

typeName

进入protected String typeName; public String getTypeName() { return typeName; } 并在子类构造函数中定义成员,如下所示

abstract class

现在,typeName = "Some Particular Type"; 需要static Map

abstract class

并在public static Map<String, int> typeCounts; 的构造函数中执行以下操作:

abstract class

最后,您需要to iterate typeCounts并使用输出的键和值。