我正在尝试使用以下内容返回体育队的所有'球员和他们的目标':
public String printPlayers(){
for (Player player : this.players){
return player.toString();
}
}
Netbeans说没有返回语句,我认为这是因为它在for-each循环中。但如果我把它放在外面它只会返回一个项目。这是测试代码:
Team barcelona = new Team("FC Barcelona");
Player brian = new Player("Brian");
Player pekka = new Player("Pekka", 39);
barcelona.addPlayer(brian);
barcelona.addPlayer(pekka);
barcelona.addPlayer(new Player("Mikael", 1));
barcelona.printPlayers();
在Player对象中,这是toString的作用:
public String toString(){
return ("Player: "+this.name+", goals "+this.goals);
}
答案 0 :(得分:2)
Java允许您只返回单个对象。无法返回多个对象。如果要从单个方法返回多个对象,首先必须将它们收集到单个对象中,例如数组List
或String
,然后返回该对象。
让我们看看你的代码。 Netbeans抱怨缺少return
语句,因为您的players
集合可能是空的。在这种情况下,循环块从不执行,方法结束时没有return
语句,这是不允许的。因此,让我们按如下方式修复您的方法:
public String printPlayers(){
for (Player player : this.players){
return player.toString();
}
return "";
}
此外,该方法现在只返回一个对象:它会将集合中的第一个玩家转换为字符串,然后返回该对象。其他球员被忽略了。所以你必须在一个物体中收集你的球员。由于您想要返回一个字符串,因此在单个字符串中收集字符串是有意义的:
public String printPlayers(){
String result = "";
for (Player player : this.players){
result += " " + player.toString();
}
return result;
}
现在您可以尝试更好地完成结果,例如删除第一个元素的前导空格,或者添加逗号而不是空格等。另外,为了获得更高的性能,您可以使用StringBuilder
构建你的字符串(但是一旦你有了一个工作方法就考虑性能!)。
答案 1 :(得分:0)
为什么netbeans抱怨,如果你没有进入for循环怎么办?所以应该总是有回报。
来实际问题,
只需构建一个String并返回
public String printPlayers(){
StringBuilder builder=new StringBuilder();
for (Player player : this.players){
builder.append(player).append(" ");
}
return builder.toString();
}
这是构建一个String,将所有玩家附加为String并最终返回。
答案 2 :(得分:0)
public String printPlayers(){
String data="";
for (Player player : this.players){
data +=player.toString();
}
return data;
}
答案 3 :(得分:0)
使用StringBuilder
public String printPlayers(){
StringBuilder sb = new StringBuilder();
for (Player player : this.players){
sb.append(player.toString());
}
return sb.toString();
}