我刚刚开始学习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
问题是你要将你的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);
}
您在类级别声明一个变量:
static String re = "";
但是你在本地范围内重新声明它:
String re = re + r;
因此,这行代码(以及此范围内的任何其他内容)将尝试使用此变量而不是类级别的变量。在这行代码中,您引用变量两次,第二次引用尝试从变量中获取值。
但是同一行也是声明并将初始值设置为变量。在设置之前,您无法获得值。因此错误。
如果要使用类级变量,请删除重新声明:
re = re + r;
在您的代码错误中:变量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
在您的代码中,您希望将变量're'声明两次。一个在类级别(静态),一个在方法内。您可以删除静态声明。
在main方法中的代码中,而不是
String re = re + r;
试试这个,
string re = "";
re+=r;