3 回答
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
TA贡献1780条经验 获得超5个赞
改变
return output;
到
return output + current;
您没有将最后一个元素附加到您的输出中。
此外,您Iterator::next
在检查之前调用Iterator::hasNext
,如果您有一个空的Bag
,则会有一个NoSuchElementException
.
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1891条经验 获得超3个赞
在其他答案中已经批评了迭代器的使用;还应注意边界条件:0 或 1 个儿童。
public String toString() {
String output = String.format("a %s", name);
if (!children.isEmpty()) {
// Unfortunately because of the recursion the following
// cannot be done.
//String list = children.stream()
// .map(Entity::toString).collect(Collectors.join(", "));
//output += list.replaceFirst(", ([^,]*)$", " and $1");
// Iterating from the back reversed, allows an easy
// discrimination of comma and "and."
StringBuilder list = new StringBuilder();
String separator = " and ";
ListIterator<Entity> itemIterator = children.listIterator(children.size());
while (itemIterator.hasPrevious()) {
Entity entity = itemIterator.previous();
list.insert(0, entity.toString());
if (itemIterator.hasPrevious()) {
list.insert(0, separator);
separator = ", ";
}
}
output += list.toString();
}
return output;
}
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
TA贡献1906条经验 获得超3个赞
你在 while 条件下有错误
if (!itemIterator.hasNext()) return output;
Entity current = itemIterator.next();
while (true) {
output += current.toString();
if (!itemIterator.hasNext()) break;
Entity next = itemIterator.next();
// ......
current = next;
}
return output;
你基本上跳过最后一个实体
添加回答
举报