2014-02-28 91 views
1

所以我有這個循環,將採取一行文本,並將其設置爲一個字符串來處理的方法。Java。文件處理。 For循環錯誤

while (input.hasNextLine()){ 
    String text = input.nextLine(); 
    processLine(text); 
} 

processLine方法是。

public static void processLine(String text) { 
    Scanner data = new Scanner(text); 
    while (data.hasNext()){ 
     String str = "hi"; 
     int tabCount = 0;   
     str = data.next(); 
     System.out.print(str + " "); 
     if (str.equals("{")) { 
      tabCount++; 
      System.out.println(); 
      for (int i = 0; i < TAB_SIZE * tabCount; i++){ 
       System.out.print(" "); 
     } 
    } 
} 

發生了什麼是我的tabCount沒有增加,但它仍然在做println。怎麼會這樣?這是輸出。

public class Test1 { 
    public static void main(String[] args) { 
    System.out.println("This is Test 1."); } } 

任何幫助表示讚賞。

+0

在while循環之外聲明tabCount變量。 – Max

回答

3

tabCount變量是因此while loop裏面越來越重置每次迭代也就是說,它永遠是0

嘗試

public static void processLine(String text) { 
    Scanner data = new Scanner(text); 
    int tabCount = 0;   
    while (data.hasNext()){ 
     String str = "hi"; 
     str = data.next(); 
     System.out.print(str + " "); 
     if (str.equals("{")) { 
      tabCount++; 
      System.out.println(); 
      for (int i = 0; i < TAB_SIZE * tabCount; i++){ 
       System.out.print(" "); 
     } 
    } 
} 
3

您在while循環的本地範圍內創建tabCount變量,因此循環的每次迭代都會重置爲零。在while循環之外移動tabCount的聲明和初始化。

1

tabCount被強制爲0在每次迭代while循環。做tabCount的聲明和初始化while循環之前,只留下tabCount的後綴遞增而循環的如果條款內。這樣它將保留正確的tabCount值。