【问题标题】:using a class as a variable identifier?使用类作为变量标识符?
【发布时间】:2013-11-16 20:57:22
【问题描述】:

我正在制作几个简单的类来计算垄断游戏中的一些事情。

我的第一堂课 (BoardSquare) 有方法来获取和设置玩家 ID 广场名称和广场上的房屋数量,而我还有另一种方法,它使用 if 语句根据广场上有多少房子来计算租金。

我的第二个类(House)有一个方法,可以在另一个 if 语句中获取新房子的成本,然后有一个 set 方法来设置房价。

我的目标是在 boardsquare 类中使用 House 类。我的意思是,而不是有一个实例变量

    int houses;

为了保存正方形上的房屋数量,我使用了 House 类型的变量。换句话说,与其在一个广场上拥有许多房屋,不如拥有 0 或 1 间房屋。

我知道我想做什么,只是不知道该怎么做。

所以我有一个实例变量 房屋; 我的 getHouses 方法读取

    public House getHouses(this is where i had int h(from the constructor) but I dont know what to put here now)
    {
    Whatever I need to put here to access the class House
    }

希望您能理解我想要完成的工作。如果您能提供任何提示,我将不胜感激。

【问题讨论】:

    标签: java class methods instance-variables class-variables


    【解决方案1】:

    你想要Collection<House>

    除非您需要链表的特定行为,否则不要使用LinkedList<House>。这也适用于ArrayList。您可能希望将其中任何一个作为实现,但请尽可能使用最抽象的集合。

    • List是房子的顺序很重要
    • Set 如果您只想对每种类型的房屋强制执行一个实例(可能不适用)

    所以:

    Collection<House> houses = new ArrayList<House>();
    
    public Collection<House> getHouses() {
        return houses;
    }
    
    public void addHouse(House newHouse) {
        houses.add(newHouse);
    }
    

    我选择了ArrayList 实现,因为将新元素添加到列表末尾很有效。 LinkedList 也是如此,但是LinkedList 增加了额外的开销,使得将条目插入到List 中变得更加高效。有关详细信息,请参阅文档。

    【讨论】:

      【解决方案2】:

      在 BoardSquare 类中添加一个实例变量,如下所示:

      LinkedList<House> houses;
      

      如果只能有 0 或 1 个房屋,您可以有一个 House 类型的实例变量和一个名为 hasHouses 的布尔类型的实例变量。

      【讨论】:

      • 我总是喜欢避免在我的班级领域展示实现。即)只需使用通用 List 而不是 LinkedList 以便将来在其他任何地方使用此字段时,您可以使用任何您想要的列表。
      • 也可以。它是 LinkedList,因为我假设这是一个可变长度对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2013-06-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多