[英]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.