【问题标题】:Development of monopoly game垄断游戏的发展
【发布时间】:2015-10-05 11:42:21
【问题描述】:

我的子任务似乎有问题。它是丹麦语,所以我输入了它的翻译版本:

  • 创建一个类Field,它代表一个垄断游戏的领域。最初,Field 可以包含这些封装变量:
    • String name - 字段的简称
    • int number - [1..40] 范围内的数字

这两个变量都必须在构造函数中初始化,并且必须只有 getter,因为它们在创建后永远不会改变。 此外,应该有一个签名为public String toString() 的方法,因此很容易打印出玩家登陆的Field。 一开始只允许调用字段 Field1、Field2...

我的 Field 类如下所示:

public class Field {

    String name;
    int number;

    public Field(String name, int number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public int getNumber() {
        return number;
    }
}

在我的main 方法中,我想对此进行测试。所以我写了以下内容:

Field[] board = new Field[40]; // a board containing 40 fields

for (int i = 0; i < board.length; i++) {
    board[i] = new Field("Field" + (i + 1), i + 1);
}

System.out.println("Board: " + Arrays.toString(board));

在我的控制台中,我得到了这个:

板子:[test.Field@2a139a55, test.Field@15db9742, test.Field@6d06d69c,......]

我想要这个:

棋盘:[Field1, Field2, Field3,......]

【问题讨论】:

    标签: java


    【解决方案1】:

    覆盖 FieldtoString() 以返回名称,即

    public String toString() {
      return name;
    }
    

    你得到的(例如test.Field@2a139a55)是toString()的默认实现,可以在Object中找到:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    【讨论】:

      【解决方案2】:

      你错过了

      此外,应该有一个带有签名的方法 public String toString(),

      你的部分任务。

      【讨论】:

      • ...这是说“覆盖toString()”而不实际使用覆盖等概念的方式。我猜多态性还不是OP计划的一部分;)
      • 既然它现在有效,你应该接受@Thomas 的回答(或者我的,但他的要好得多)。
      【解决方案3】:

      你会用java8吗?那么我会建议这个:

      Field[] board = new Field[40]; // a board containing 40 fields
      
      for(int i = 0; i < board.length; i++){
          board[i] = new Field("Field" + (i + 1), i + 1);
      }
      
      String commaSeparatedName =
          Arrays.stream(board) // all items as stream
                .map(Field::getName) // for each take its name
                .collect(Collectors.joining(", "); // join names with a comma
      System.out.println("Board: [" + commaSeparatedNames +"]");
      

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 2020-03-07
        • 2012-03-13
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多