java - 循环内部的变量

时间:2017-12-20 18:52:31

标签: java string loops

我刚刚开始学习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

4 个答案:

答案 0 :(得分:2)

您在类级声明一个变量:

static String re = "";

但是你在本地范围内重新声明

String re = re + r;

因此,这行代码(以及此范围内的任何其他内容)将尝试使用变量而不是类级别的变量。在这行代码中,您引用变量两次, second 引用尝试从变量中获取值。

但是同一行也是声明并将初始值设置为变量。在之前,您无法获得值。因此错误。

如果要使用类级变量,请删除重新声明:

re = re + r;

答案 1 :(得分:2)

问题是您要将re变量重新声明为局部变量,“遮蔽”static String re以外宣布的main字段。

一般情况下,制作可变的static字段并不是一个好主意,因此您应该在String re = ""内移动main()的声明,并将String re = re + r ;声明替换为re += r

注意:虽然上面的代码可以使您的代码正常工作,但在循环内追加String变量并不是一个好主意。最好使用StringBuilder对象,并在循环中调用其append方法:

StringBuilder re = new StringBuilder();
for (...) {
    ...
    re.append(r);
}

答案 2 :(得分:1)

在您的代码中错误:变量re可能尚未初始化,因为只有在for循环条件为真时才会初始化

其他的是你试图将 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

答案 3 :(得分:0)

在您的代码中,您希望将变量're'声明两次。一个在类级别(静态),一个在方法内。您可以删除静态声明。

在main方法里面的代码中, 而不是

String re = re + r;

试试这个,

string re = "";
re+=r;