Java - 访问for循环内外的变量

标签 java variables loops for-loop

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

不过,还有两个更高级别的建议。

  1. 如果您有可用的连接方法,正如某些库提供的那样(.NETPython 平台也是如此),您可以只使用更易于阅读的连接。
  2. 但是,如果您没有可用的连接方法(据我所知,Java 标准库不提供此类方法),您应该使用 StringBuilder ,与@anubhava 的建议一致。您将在处理大量字符串时获得更好的性能,并且代码更易于理解,这是双赢的。

编辑:正如@edalorzo 在评论中正确提到的那样,您只会收到未初始化本地 变量的错误,并且静态和实例字段都会自动初始化。具体来说,数值类型(intlongdouble等)被初始化为0, boolean 值被初始化为false,引用类型被初始化为null

规范明确描述了字段的自动初始化,因此您可以依赖它,但它很少是您想要的。通常,您以后使用它时会需要该字段的非默认值,因为 null 不是很有用(而且许多语言,特别是标准 ML 等函数式语言,没有 完全为 null)。所以我建议在构造函数中初始化对象的所有字段。


(*):我在上面展示的“脱糖”几乎是准确的:事实上,playerlist 只被评估一次,这不会影响这个特定程序的行为。

关于Java - 访问for循环内外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407505/

相关文章:

java - 相同的包,不同的目录

string - Gforth 在变量中存储字符串值

python - 记录循环生成的数字

java - 使用循环输入数组列表

Java,JPanel 不显示在 JFrame 中,可能是并发问题?

objective-c - 用其他类型重新定义变量名

c - C 中 while 循环中的++i 和 i++

loops - 如何使用现有的for循环在Liquid模板中进行n次循环

java - 在没有 Spring Boot 应用程序的情况下使用 Spring Boot Actuator

PHP变量变量困惑