Java-Access for循环内外的变量
我怎样才能做到这一点?我需要在for循环内有一个变量,然后在循环外访问它Java-Access for循环内外的变量,java,variables,loops,for-loop,Java,Variables,Loops,For Loop,我怎样才能做到这一点?我需要在for循环内有一个变量,然后在循环外访问它 谢谢,如果这是一个很难回答的问题,我很抱歉。我就是想不出来。你很接近了。您需要将第一行更改为 String playerlist; for(Player p : allplayers){ playerlist += p.getDisplayName() + ", "; } sendMessage(playerlist); 在Java中,在初始化变量之前使用变量是非法的,并且 String playerlist
谢谢,如果这是一个很难回答的问题,我很抱歉。我就是想不出来。你很接近了。您需要将第一行更改为
String playerlist;
for(Player p : allplayers){
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
在Java中,在初始化变量之前使用变量是非法的,并且
String playerlist = "";
desugars(*)至
初始化playerlist
后,您可以将其内容读取到临时变量中,然后更新playerlist
不过,有两个更高层次的建议
编辑:正如@edalorzo在评论中正确地提到的,您只会因为没有初始化局部变量而得到一个错误,静态和实例字段都会自动初始化。具体而言,数字类型(
int
、long
、double
等)初始化为0,布尔值初始化为false
,引用类型初始化为null
规范明确描述了字段的自动初始化,因此您可以依赖它,但它很少是您想要的。通常,在以后使用该字段时,您将需要该字段的非默认值,因为null
并不十分有用(许多语言,特别是像标准ML这样的函数式语言,都没有null
)。因此,我建议初始化构造函数中对象的所有字段
(*):我上面显示的“desugaring”几乎是准确的:事实上,
playerlist
只被评估一次,这不会影响这个特定程序的行为。你很接近了。您需要将第一行更改为
String playerlist;
for(Player p : allplayers){
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
在Java中,在初始化变量之前使用变量是非法的,并且
String playerlist = "";
desugars(*)至
初始化playerlist
后,您可以将其内容读取到临时变量中,然后更新playerlist
不过,有两个更高层次的建议
编辑:正如@edalorzo在评论中正确地提到的,您只会因为没有初始化局部变量而得到一个错误,静态和实例字段都会自动初始化。具体而言,数字类型(
int
、long
、double
等)初始化为0,布尔值初始化为false
,引用类型初始化为null
规范明确描述了字段的自动初始化,因此您可以依赖它,但它很少是您想要的。通常,在以后使用该字段时,您将需要该字段的非默认值,因为null
并不十分有用(许多语言,特别是像标准ML这样的函数式语言,都没有null
)。因此,我建议初始化构造函数中对象的所有字段
(*):我上面显示的“desugaring”几乎是准确的:事实上,
playerlist
只计算一次,这不会影响这个特定程序的行为。如果在循环外初始化变量,可以得到:
String temp = playerlist;
playerlist = temp + (p.getDisplayName() + ", ");
但由于您正在操作字符串,因此使用它而不是字符串会更好。原因是字符串是不可变的,您将在for循环内的每次迭代中创建一个新字符串。但是,StringBuilder是可变的,并具有各种重载的append
方法来支持您的操作。使用StringBuilder,您的代码将如下所示:
String playerlist = "";
如果在循环外初始化变量,可以得到:
String temp = playerlist;
playerlist = temp + (p.getDisplayName() + ", ");
但由于您正在操作字符串,因此使用它而不是字符串会更好。原因是字符串是不可变的,您将在for循环内的每次迭代中创建一个新字符串。但是,StringBuilder是可变的,并具有各种重载的append
方法来支持您的操作。使用StringBuilder,您的代码将如下所示:
String playerlist = "";
局部变量
playerlist
可能尚未初始化。在javafor
循环语句中,局部变量必须首先初始化,然后在循环块中使用。您必须初始化playerlist
。您可以使用以下代码:
StringBuilder playerlist = new StringBuilder();
for (Player p : allplayers) {
playerlist.append(p.getDisplayName()).append(", ");
}
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(", ");
}
String playerlist = null;
for(Player p : allplayers)
{
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
局部变量
playerlist
可能尚未初始化。在javafor
循环语句中,局部变量必须首先初始化,然后在循环块中使用。您必须初始化playerlist
。您可以使用以下代码:
StringBuilder playerlist = new StringBuilder();
for (Player p : allplayers) {
playerlist.append(p.getDisplayName()).append(", ");
}
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(", ");
}
String playerlist = null;
for(Player p : allplayers)
{
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
你发布的代码已经做到了,你需要什么?你发布的代码已经做到了,你需要什么?哇,这很简单,非常感谢:D我想我尝试了每种组合,我想我忘记了一种:)一旦它允许我(12分钟),我会接受作为最佳答案。也许值得一提的是,只有局部变量需要显式初始化,如中所述。因为类和实例变量是显式初始化和参数化的