java - 循环内部的变量

问题描述 投票:1回答:4

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

java string loops
4个回答
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
投票

您在类级别声明一个变量:

static String re = "";

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

String re = re + r;

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

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

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

re = re + r;

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


0
投票

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

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

String re = re + r;

试试这个,

string re = "";
re+=r;
© www.soinside.com 2019 - 2024. All rights reserved.