簡體   English   中英

java-循環內的變量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM