将Iterator设置为String - JAVA

时间:2014-11-09 21:45:40

标签: java iterator set tostring

我正在做一个作业,在我的课堂上,我有一个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
}

这有意义吗?

4 个答案:

答案 0 :(得分:2)

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

public String toString()

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

第三,将循环语句放在循环中总是有争议的。

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

答案 1 :(得分:1)

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

@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();
}

答案 2 :(得分:1)

您必须完全匹配签名。使用@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 :(得分:0)

我相信您现在首先要遍历整个集合,从而使element首先成为集合中的最终条目。

 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的解决方案。