【问题标题】:Set Iterator toString - JAVA将迭代器设置为字符串 - JAVA
【发布时间】:2014-11-09 21:45:39
【问题描述】:

我正在做一项作业,在我的班级中,我有一个 Set 以便为我的 Book 班级阅读多个作者。我试图弄清楚如何正确实现 toString。我会像往常一样执行 toString,然后像这样实现 Iterator:

public String toString(){
       Iterator itr = set.iterator();
       while(itr.hasNext()){
           Object element = itr.next();
       }

       Return "Book, ISBN:" + isbn +", Author:" + element
}

这有意义吗?

【问题讨论】:

  • 好吧,你的代码中有太多的returns,尤其是第一行。只尝试一个作为最后一行。
  • 那么取出第一行的return,以及iterator内的return? while(itr.hasNext()){ //code } return "Book, isbn =" + isbn + ", Author:" + element;对吗?
  • 这有意义吗?没有。首先,正如其名称所示,toString() 应该返回一个 String,而不是 Set。该方法首先返回一个字符串,然后执行其他操作。由于它已经返回,之后的所有行将永远不会执行。你明白退货是什么意思吗?最后,这显然无法编译。那么,为什么不阅读从编译器获得的错误消息呢?
  • JB,我明白你在说什么。这是我的第一个 Java 课程,我的脚还在湿。我参加了很多其他课程,并且了解您只能返回一次。我的监督。

标签: java iterator set tostring


【解决方案1】:

首先,你必须使用与toString完全相同的方法签名,即:

public String toString()

其次,您的实现中的第一行是一个 return 语句,它使您的其余行无法访问。

第三,将 return 语句放入循环中总是值得商榷的。

虽然我不太确定你想如何实现你的 toString,但你需要先改变这些。

【讨论】:

    【解决方案2】:

    您必须完全匹配签名。使用@Override 注释确定您已经这样做了。其次看StringBuilder,以小步骤创建一个新字符串。但是对于这个问题,您可能只需要+就可以解决。

    @Override
    public String toString(){
           String retString = "Book, isbn =" + isbn + ", Author:";
           Iterator itr = set.iterator();
           while(itr.hasNext()){
               Object element = itr.next();
               retString = retString + element.toString();
           }
           return retString;
    }
    

    没有什么可以改进的方法,我会让你解决这些问题。

    【讨论】:

      【解决方案3】:

      我会想到更多这样的事情:

      @Override
      public String toString() {
          StringBuilder sb = new StringBuilder();
          sb.append("Book, isbn =" + isbn + ", Author: ");
          for (String s : authorSet) {
              sb.append(s).append(" ");
          }
          return sb.toString();
      }
      

      【讨论】:

      • 我会问我的教授,但我不确定他是否希望我们使用它。感谢您的意见
      【解决方案4】:

      我相信您现在首先迭代整个集合,因此首先使元素成为您集合中的最终条目。

       while(itr.hasNext()){
             Object element = itr.next();
         }
      
         Return "Book, ISBN:" + isbn +", Author:" + element
      

      现在您的回报将始终是同一个图书对象。

      您应该尝试类似的方法:

      String res = "";
      while(itr.hasNext()){
          res = res + element.toString() + "\n";
      }return res; 
      

      这将是一个不使用 StringBuilder 的解决方案。

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 2012-10-23
        • 1970-01-01
        • 2011-07-22
        • 2019-05-06
        • 2016-01-31
        • 2012-02-24
        • 2012-08-19
        • 1970-01-01
        相关资源
        最近更新 更多