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