2014-02-28 94 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值。