[英]Java - Access variable inside and outside of for-loop
String playerlist;
for(Player p : allplayers){
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
我该怎么做? 我需要在for循环内有一个变量,然后在循环外访问它。
谢谢,如果这是一个非常棘手的问题,对不起。 我只是想不通。
如果在循环外初始化变量,则可以得到:
String playerlist = "";
但是,由于您要处理字符串,因此使用StringBuilder代替String会更好。 原因是String是不可变的,您将在for循环的每次迭代中创建一个新的String。 但是,StringBuilder是可变的,并且具有各种重载的append
方法来支持您的操作。 使用StringBuilder,您的代码将如下所示:
StringBuilder playerlist = new StringBuilder();
for (Player p : allplayers) {
playerlist.append(p.getDisplayName()).append(", ");
}
你近了 您需要将第一行更改为
String playerlist = "";
在Java中,在初始化变量之前使用变量是非法的,并且该行
playerlist += p.getDisplayName() + ", ";
desugars(*)至
String temp = playerlist;
playerlist = temp + (p.getDisplayName() + ", ");
初始化playerlist
器playerlist
,便可以将其内容读入临时变量中,然后更新playerlist
。
但是,有两个更高层次的建议。
编辑:正如@edalorzo在评论中正确提到的那样,您只会因未初始化局部变量而得到错误,并且静态字段和实例字段都会自动初始化。 具体来说,数字类型( int
, long
, double
等)初始化为0,布尔值初始化为false
,引用类型初始化为null
。
该规范明确描述了字段的自动初始化,因此您可以依靠它,但这很少是您想要的。 通常,以后使用该字段时,您将需要该字段的非默认值,因为null
并不是非常有用(而且许多语言,尤其是像Standard ML这样的功能语言,都完全没有null
)。 因此,我建议在构造函数中初始化对象的所有字段。
(*):上面显示的“减糖”几乎是准确的:实际上, playerlist
仅被评估一次,这不会影响该特定程序的行为。
本地变量playerlist
可能尚未初始化。 在java for
loop语句中,局部变量必须首先初始化,然后在in循环块中使用。 您必须初始化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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.