[英]java - variable inside of loop
我剛剛開始學習Java,如果我的問題有點麻煩,我很抱歉。
誰能告訴我為什么此代碼給出錯誤以及如何解決? 謝謝
static String test = "abc";
static String lower = "abcdefghijklmnopqrstuvwxyz" ;
static String re = "" ;
public static void main(String[] args) {
for (int i = 0 ; i < test.length() ; ++i ) {
char x = test.charAt(i);
int f = lower.indexOf(x);
int h = (f + 2) %26;
if (h <0) {
h = h + 26;
}
char r = lower.charAt(h);
String re = re + r ; /* here is the problem */
}
System.out.println(re);
}
}
輸出: The local variable re may not have been initialized
您在類級別聲明一個變量:
static String re = "";
但是,然后您在本地范圍內重新聲明它:
String re = re + r;
因此,這一行代碼(以及該范圍內的所有其他代碼)將嘗試使用此變量而不是類級別的變量。 在此代碼行中,您兩次引用變量,而第二次引用正嘗試從變量中獲取值。
但是,這同一條線上,也聲明和設置初始值給變量。 在設置之前 ,您無法獲取任何值。 因此錯誤。
如果要使用類級別的變量,請刪除重新聲明:
re = re + r;
問題是您將re
變量重新聲明為局部變量,從而“遮蓋”了main
外部聲明的static String re
字段。
通常,創建可變的static
字段不是一個好主意,因此您應該在main()
內部移動String re = ""
的聲明,並替換String re = re + r ;
用re += r
聲明。
注意:盡管以上內容可以使您的代碼正常工作,但在循環內附加到String
變量並不是一個好主意。 您最好使用StringBuilder
對象,並在循環內調用其append
方法:
StringBuilder re = new StringBuilder();
for (...) {
...
re.append(r);
}
在您的代碼錯誤中:變量re可能尚未初始化,因為它僅在for循環條件為true時才被初始化
另一件事是您嘗試將String re兩次聲明為方法外部以及方法內部的靜態變量
不僅如此,在您的代碼中,您嘗試訪問變量范圍之外的變量。
class Demo{
static String test = "abc";
static String lower = "abcdefghijklmnopqrstuvwxyz" ;
static String re = "" ;
public static void main(String[] args) {
for (int i = 0 ; i < test.length() ; ++i ) {
char x = test.charAt(i);
int f = lower.indexOf(x);
int h = (f + 2) %26;
if (h <0) {
h = h + 26;
}
char r = lower.charAt(h);
re = re + r ;
}
System.out.println(re);
}
}
讀
http://javaseeeedu.blogspot.com/2016/01/local-variable-global-variable-instance.html
在您的代碼中,您看起來要兩次聲明變量're'。 在類級別(靜態)一次,在方法內部一次。 您可以刪除靜態聲明。
在main方法里面的代碼中,
String re = re + r;
嘗試這個,
string re = "";
re+=r;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.