String playerlist;
for(Player p : allplayers){
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
我怎样才能做到这一点?我需要在我的 for 循环中有一个变量,然后在循环之外访问它。
谢谢,对不起,如果这是一个非常愚蠢的问题。我就是想不通。
你很近。您需要将第一行更改为
String playerlist = "";
在Java中,在初始化之前使用变量是非法的,并且该行
playerlist += p.getDisplayName() + ", ";
脱糖(*)到
String temp = playerlist;
playerlist = temp + (p.getDisplayName() + ", ");
一旦你初始化playerlist
,你就可以将它的内容读入临时变量,然后更新playerlist
。
不过,有两个更高级别的建议。
编辑:正如@edalorzo 在评论中正确提到的那样,您只会因为未初始化局部变量而收到错误消息,并且静态和实例字段都会自动初始化。具体来说,数值类型(int
、long
、double
等)初始化为 0,布尔值初始化为false
,引用类型初始化为null
。
该规范明确描述了字段的自动初始化,因此您可以依赖它,但这很少是您想要的。通常,您以后使用该字段时会需要该字段的非默认值,因为null
它不是非常有用(而且许多语言,特别是标准 ML 等功能语言,null
完全没有)。所以我建议在构造函数中初始化对象的所有字段。
(*):我上面展示的“去糖”几乎是准确的:事实上,playerlist
只评估一次,这不会影响这个特定程序的行为。
如果你在循环外初始化你的变量,你可以得到:
String playerlist = "";
但是由于您正在操作字符串,因此使用StringBuilder而不是 String会更好。原因是字符串是不可变的,您将在 for 循环内的每次迭代中创建一个新字符串。但是 StringBuilder 是可变的,并且有各种重载append
方法来支持您的操作。使用 StringBuilder 你的代码会变成这样:
StringBuilder playerlist = new StringBuilder();
for (Player p : allplayers) {
playerlist.append(p.getDisplayName()).append(", ");
}
局部变量playerlist
可能尚未初始化。在javafor
循环语句中,局部变量必须先初始化,然后在循环块中使用。你必须初始化playerlist
. 您可以使用以下代码:
String playerlist = null;
for(Player p : allplayers)
{
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
但最好使用以下代码:
StringBuilder playerlist = new StringBuilder();
for(Player p : allplayers)
{
playerlist.append(p.getDisplayName()).append(", ");
}
sendMessage(playerlist.toString());