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