繁体   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