java-循环内部的变量
我刚刚开始学习java,如果我的问题有点离题,我很抱歉 有人能告诉我为什么这段代码会出现错误以及如何修复它吗? 谢谢java-循环内部的变量,java,string,loops,Java,String,Loops,我刚刚开始学习java,如果我的问题有点离题,我很抱歉 有人能告诉我为什么这段代码会出现错误以及如何修复它吗? 谢谢 静态字符串测试=“abc”; 静态字符串lower=“abcdefghijklmnopqrstuvxyz”; 静态字符串re=“”; 公共静态void main(字符串[]args){ 对于(int i=0;i
静态字符串测试=“abc”;
静态字符串lower=“abcdefghijklmnopqrstuvxyz”;
静态字符串re=“”;
公共静态void main(字符串[]args){
对于(int i=0;i 如果(h在类级别声明变量:
static String re = "";
但随后在本地范围内重新声明它:
String re = re + r;
因此,这行代码(以及此范围内的任何其他代码)将尝试使用此变量而不是类级别1。在这行代码中,您引用变量两次,第二次引用尝试从变量中获取值
但是这一行也在声明和设置变量的初始值。在设置之前,您无法获取值。因此会出现错误
如果要使用类级别变量,请删除重新声明:
re = re + r;
在类级别声明变量:
static String re = "";
但随后在本地范围内重新声明它:
String re = re + r;
因此,这行代码(以及此范围内的任何其他代码)将尝试使用此变量而不是类级别1。在这行代码中,您引用变量两次,第二次引用尝试从变量中获取值
但是这一行也在声明和设置变量的初始值。在设置之前,您无法获取值。因此会出现错误
如果要使用类级别变量,请删除重新声明:
re = re + r;
问题是您正在将re
变量重新声明为局部变量,“隐藏”在main
之外声明的静态字符串re
字段
一般来说,创建可变的static
字段不是一个好主意,因此您应该将String re=”“
的声明移动到main()
中,并将String re=re+r;
声明替换为re+=r
注意:尽管上述方法可以让代码正常工作,但在循环中附加到字符串
变量不是一个好主意。最好使用对象,并在循环中调用其附加
方法:
StringBuilder re = new StringBuilder();
for (...) {
...
re.append(r);
}
问题是您正在将re
变量重新声明为局部变量,“隐藏”在main
之外声明的静态字符串re
字段
一般来说,创建可变的static
字段不是一个好主意,因此您应该将String re=”“
的声明移动到main()
中,并将String re=re+r;
声明替换为re+=r
注意:尽管上述方法可以让代码正常工作,但在循环中附加到字符串
变量不是一个好主意。最好使用对象,并在循环中调用其附加
方法:
StringBuilder re = new StringBuilder();
for (...) {
...
re.append(r);
}
在您的代码中错误:变量re可能尚未初始化,因为它只有在for循环条件为true时才会初始化
另一件事是您尝试将字符串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);
}
}
类演示{
静态字符串测试=“abc”;
静态字符串lower=“abcdefghijklmnopqrstuvxyz”;
静态字符串re=“”;
公共静态void main(字符串[]args){
对于(int i=0;i if(h在代码中错误:变量re可能未初始化,因为它仅在for循环条件为真时才会初始化
另一件事是您尝试将字符串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);
}
}
类演示{
静态字符串测试=“abc”;
静态字符串lower=“abcdefghijklmnopqrstuvxyz”;
静态字符串re=“”;
公共静态void main(字符串[]args){
对于(int i=0;i 如果(h在代码中,您看起来要声明变量're'两次。一次在类级别(静态),一次在方法中。您可以删除静态声明
在main方法内部的代码中,
而不是
String re = re + r;
试试这个
string re = "";
re+=r;
在代码中,您看起来要声明变量“re”两次。一次在类级别(静态),一次在方法中。您可以删除静态声明
在main方法内部的代码中,
而不是
String re = re + r;
试试这个
string re = "";
re+=r;
您在main外部声明和初始化它,以便main内部的字符串不会被初始化。从那里删除字符串,然后它将使用main外部的一个类级别的字符串。如果希望人们尝试阅读,请正确缩进代码。只需使用re+=r;
而不是String re=re>+r;
一个好的做法是调用方法中不同于全局变量的变量。您在main外部声明和初始化它,这样main内部的变量就不会被初始化。从那里删除字符串,然后它将使用main外部的变量,该变量将位于类级别。如果是,请正确缩进代码您希望人们尝试阅读它。只需使用re+=r;
而不是String re=re+r;
一个好的做法是调用va