簡體   English   中英

變量僅在while循環內具有值嗎?

[英]the variable only have it value inside while loop?

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 String? 我是否必須將變量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,h=null;
StringBuilder myString = null;
while((string = bufferedReader.readLine()) != null) {                
    myString =stringBuilder.append(string);
    h=myString.toString();
    }
   System.out.println(h);
}

您已在while循環內初始化h,無法在循環外訪問它

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

你可以這樣使用

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

您在while循環中聲明了h變量。 因此,while循環的每次迭代都會為該迭代創建一個新的h變量。

除非在while循環外聲明了h變量,否則您將無法在while循環外訪問h變量。

請記住,盡管如此,但每次迭代時都會覆蓋h變量,所以最終結果將是放在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());  
}

您必須檢查我的語法,但這應該更干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM