简短版本:
为什么这段代码:
@Override
public String toString() {
String result = "";
for (Movable i : this.allObjects) {
result += i.toString();
result +='\n';
}
return result;
}
虽然在我的控制台上没有产生结果,但是通过自动测试接受了,而这个:
@Override
public String toString() {
for (Movable i : this.allObjects) {
System.out.println(i.toString());
}
return "";
}
在我的控制台上打印测试结果,而根据相同的测试不打印任何内容?
长版:
我用赫尔辛基大学创建的MOOC学习Java,我对其中一个练习的结果感到非常惊讶。它在这里:
http://mooc.cs.helsinki.fi/programming-part2/material/week-10?noredirect=1
第28页。它是关于对象多态性的非常直接和简单的练习,我写了一个代码,它始终在控制台中给出预期的结果。但是这里抓住了。我无法通过测试。我收到的错误看起来像是无法打印结果,尽管事实上我在屏幕上看到了这些结果。我设法找出错误的地方,从Group类覆盖toString方法我花了一些时间试图在我的代码中发现错误,但无济于事。所以最后我放弃了 - 自从我开始这门课程以来第一次 - 我寻找了一个正确的答案。当我应用找到的解决方案时,测试通过但是我无法在我的控制台上看到任何结果。我不明白为什么。
答案 0 :(得分:2)
因为您不应该在控制台上看到任何内容。 toString()
方法返回对象的String
表示形式。在正确的代码中,返回正确的结果。
在您的代码中,您在控制台上显式打印内容,然后返回空String
。