Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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 变量在while循环中只有它的值?_Java_Variables - Fatal编程技术网

Java 变量在while循环中只有它的值?

Java 变量在while循环中只有它的值?,java,variables,Java,Variables,当我尝试代码的第二部分时,它不会打印任何内容。 如何使整个h字符串脱离while循环?我是否必须将变量h声明为实例变量而不是局部变量?您在while循环中声明了h变量。因此,while循环的每次迭代都将创建一个新的h变量,该变量的作用域为该迭代 除非在while循环外声明h变量,否则无法在while循环外访问它 请记住,按照您编写的方式,h变量也会在每次迭代中被覆盖,因此最终结果将是最后放入h中的内容 从长远来看,这段代码也可以被清理很多,而且你甚至不需要h static void parse(

当我尝试代码的第二部分时,它不会打印任何内容。
如何使整个h字符串脱离while循环?我是否必须将变量h声明为实例变量而不是局部变量?

您在while循环中声明了h变量。因此,while循环的每次迭代都将创建一个新的h变量,该变量的作用域为该迭代

除非在while循环外声明h变量,否则无法在while循环外访问它

请记住,按照您编写的方式,h变量也会在每次迭代中被覆盖,因此最终结果将是最后放入h中的内容

从长远来看,这段代码也可以被清理很多,而且你甚至不需要h

static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                
        myString =stringBuilder.append(string);
        String h=myString.toString();
        **System.out.println(h);**
        }

    }




static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }

       **System.out.println(h);**  
    }

您必须检查我的语法,但这应该更简洁。

您在while循环中声明了h变量。因此,while循环的每次迭代都将创建一个新的h变量,该变量的作用域为该迭代

除非在while循环外声明h变量,否则无法在while循环外访问它

请记住,按照您编写的方式,h变量也会在每次迭代中被覆盖,因此最终结果将是最后放入h中的内容

从长远来看,这段代码也可以被清理很多,而且你甚至不需要h

static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                
        myString =stringBuilder.append(string);
        String h=myString.toString();
        **System.out.println(h);**
        }

    }




static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }

       **System.out.println(h);**  
    }

您必须检查我的语法,但这应该更简洁。

您在while循环内初始化了h,但无法在循环外访问它

static void parse(String fileName) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(fileName));
    StringBuilder sb = new StringBuilder();
    while((String line = br.readLine()) != null) {                 
        sb.append(line);
    }

    System.out.println(sb.toString());  
}
你可以这样使用它

while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }
       System.out.println(h);  

您已在while循环内初始化了h,但无法在循环外访问它

static void parse(String fileName) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(fileName));
    StringBuilder sb = new StringBuilder();
    while((String line = br.readLine()) != null) {                 
        sb.append(line);
    }

    System.out.println(sb.toString());  
}
你可以这样使用它

while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }
       System.out.println(h);  

不需要创建实例变量。只需将h置于循环之外:-

String h;
 while((string = bufferedReader.readLine()) != null) {                 
           stringBuilder.append(string);
           }
       h=stringBuilder.toString();
       System.out.println(h);  

不需要创建实例变量。只需将h置于循环之外:-

String h;
 while((string = bufferedReader.readLine()) != null) {                 
           stringBuilder.append(string);
           }
       h=stringBuilder.toString();
       System.out.println(h);  

无论如何,我可以写我的代码,它不会在每次迭代中都被覆盖??长话短说,不。这取决于你真正想用h做什么。sb已经在存储文件内容,那么h到底是做什么的呢?如果你想把每一行存储在某个地方,我建议你把它们塞进一个字符串数组中,你可以单独查看。对不起,我不应该说不…你当然可以把字符串连接到h而不是覆盖它…但是,我真的不明白这一点,因为这些线条已经在sb中构建。我正在尝试从sb中获取每帧的10个字母组合。假设字符串是“abcdefghijk”,我尝试得到“abcdefghij”和“bcdefghijk”。这需要更多的操作,而不仅仅是将行读入变量。在没有h的情况下,你已经在做了。我会抛弃StringBuilder的想法,如果你的意思是“每一行”而不是“每一帧”,那么你可以保持循环不变,只需使用子字符串或其他什么来操作字符串行变量。不管怎样,我可以写我的代码,它不会在每次迭代中被覆盖??长话短说,不会。这取决于你真正想用h做什么。sb已经在存储文件内容,那么h到底是做什么的呢?如果你想把每一行存储在某个地方,我建议你把它们塞进一个字符串数组中,你可以单独查看。对不起,我不应该说不…你当然可以把字符串连接到h而不是覆盖它…但是,我真的不明白这一点,因为这些线条已经在sb中构建。我正在尝试从sb中获取每帧的10个字母组合。假设字符串是“abcdefghijk”,我尝试得到“abcdefghij”和“bcdefghijk”。这需要更多的操作,而不仅仅是将行读入变量。在没有h的情况下,你已经在做了。我会抛弃StringBuilder的想法,如果你的意思是“每一行”而不是“每一帧”,那么你可以保持循环不变,只需使用子字符串或其他什么来操作字符串行变量。这不是连接而是覆盖?而((string=bufferedReader.readLine())!=null){myString=stringBuilder.append(string);}这段代码应该使myString包含所有文本还是只包含一行文本?我认为应该创建一个字符串(myString),其中包含整个文件“myString=stringBuilder.append(string);”中的所有可用文本,这不是串联而是覆盖,而((string=bufferedReader.readLine())!=null){myString=stringBuilder.append(string);}这段代码应该使myString包含所有文本还是只包含一行文本?我认为应该创建一个字符串(myString),其中包含整个文件中可用的所有文本