【问题标题】:Calling toString on objects在对象上调用 toString
【发布时间】:2015-10-16 21:20:00
【问题描述】:

我有一个类Game,它有一个toString 方法。

我想使用嵌套的 for 循环遍历一个数组,然后对于该数组的指定索引中的每个 Tile 元素,打印出一个基于 Tile 属性的特定字符串我在Tile 类中编写的toString 方法。

如果这是适当的逻辑,我该如何实现?我无法正确匹配两个toString 方法之间的参数。

public String toString(tileArr){
    for(int i = 0; i < rows; i++){      
        for(int j = 0; j < columns; j++){ 
            tileArr[i][j].toString(t);
        }   
        System.out.print("\n");
    }
    return "";
}

【问题讨论】:

  • 为什么要这样做而不是调用/创建直接返回值的适当方法?
  • @Richard Tingle 这是针对学校作业的,说明说明两个班级都必须有一个 toString 方法,一个用于显示板子,另一个用于显示每个单独的对象。
  • @azurefrog ,我用它作为例子,现在我可以看到它的品味很差,我称之为 Tile。
  • 说他们必须拥有它们,但大概不是您必须以这种方式使用它们?有一个 toString 方法来描述一个用于调试目的的对象是很正常的。
  • 那你为什么不像你描述的那样做呢?在 Game.java 中创建一个 toString 方法,该方法遍历图块并在每次迭代中调用图块的 toString 方法。我想我没有得到问题

标签: java arrays oop tostring


【解决方案1】:

您混淆了两个概念:在内存中创建字符串和打印。

您的 toString() 方法不应调用 System.out.println()。相反,它应该只是创建一个字符串,它可以被某个调用者打印出来。

此外,如果您尝试提供传统的toString() 方法,它不需要任何参数。由于它是一个实例方法,它可以访问对象的字段。

public class Game {
  private int rows, columns;
  private int tileArr[][];

  ...

  public String toString(){
      StringBuilder builder = new StringBuilder();
      for(int i = 0; i < rows; i++){      
         for(int j = 0; j < columns; j++){ 
            builder.append( tileArr[i][j].toString() );
            builder.append(" "); // If tiles need to be separated.
         }   
         builder.append("\n");
      }
      return builder.toString();
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多