Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-循环内部的变量_Java_String_Loops - Fatal编程技术网

java-循环内部的变量

java-循环内部的变量,java,string,loops,Java,String,Loops,我刚刚开始学习java,如果我的问题有点离题,我很抱歉 有人能告诉我为什么这段代码会出现错误以及如何修复它吗? 谢谢 静态字符串测试=“abc”; 静态字符串lower=“abcdefghijklmnopqrstuvxyz”; 静态字符串re=“”; 公共静态void main(字符串[]args){ 对于(int i=0;i

我刚刚开始学习java,如果我的问题有点离题,我很抱歉

有人能告诉我为什么这段代码会出现错误以及如何修复它吗? 谢谢

静态字符串测试=“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;iif(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