我正在做一个作业,在我的课堂上,我有一个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
}
这有意义吗?
答案 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的解决方案。