我有一个方法可以返回平面的LinkedList中所有人的名字。
然而,即使方法中有一个return语句,我仍然被告知有一个缺少的return语句。
如何在不添加其他退货声明的情况下解决这个问题?为什么它被认为无效?是否将另一个return语句更改为返回的内容?
非常感谢任何反馈。
public String check() {
for (Person person: passengers)
{
return person.getName();
}
}
答案 0 :(得分:5)
因为如果passengers
为空,则永远不会输入循环。
如果从未输入循环,假设其中只有返回语句,我们就有一个严重的问题,你不觉得吗?就像没有return
一样。
您需要在循环之外添加另一个return
语句。
另请注意,return
会自动退出该方法,因此我认为这不是您想要的问题所在的问题:
我有一个方法可以返回LinkedList中所有人的名字 对于飞机。
修改强>
根据您的编辑,这里如何返回包含所有名称的列表:
return passengers.
.stream()
.map(Person::getName)
.collect(Collectors.toList());
请注意,您需要将方法的签名更改为
public List<String> check()
答案 1 :(得分:4)
在评论中回答你的问题。您只能从函数返回单个对象。您可以使用另一个容器并使用名称填充它并返回该容器。例如,
public LinkedList<String> check() {
LinkedList<String> names = new LinkedList<String>();
for (Person person: passengers) {
names.add( person.getName() );
}
return names;
}
答案 2 :(得分:1)
你到底想要完成什么,在这里?
目前,支票只返回第一位乘客的姓名。考虑一下您的程序如何流动以及您希望它做什么。
要回答您的问题,您需要为代码中的每个可能路径设置“转义”。即使某个块总是应该捕获并返回(不是按照定义,而只是根据您认为代码应该如何流动),您需要处理这样的情况,使得该块不会捕获并返回。这可以通过修复第一个块来实现它实际上是一个包罗万象,或者只是在第一个块没有捕获时返回或抛出错误。
即。
public boolean check() {
...
if (shouldAlwaysBeTrue) return false;
}
不起作用,因为根据定义,shouldAlwaysBeTrue不是真的。
public boolean check() {
...
if (shouldAlwaysBeTrue) return false;
return true;
}