2011-11-01 100 views
3

爲什麼當我試圖給它一個基本的文本文件時,這段代碼會進入無限循環?掃描儀類hasNextLine無限循環

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.*; 
public class TestFile 
{ 

    public static void main(String args[]) throws IOException 
    { 
      // Read in input file                                    
      File input = new File(args[0]); 
      Scanner freader = new Scanner(input); 
      while (freader.hasNextLine()) { 
       System.out.println("hi"); 
      } 

      freader.close(); 

    } 

} 

打印行只是繼續前進。

+1

(爲什麼在它返回true後返回false?) – 2011-11-02 00:03:37

+0

@Matt,請不要在你的帖子上簽名。添加到你的帖子的flare是你的簽名。 –

回答

9

因爲hasNexLine()既不會佔線也不會改變掃描儀的狀態。如果它是真的,並且沒有其他方法的掃描器被調用,它將永遠是真實的。

4

添加對nextLine或任何其他Scanner方法,該方法將在while循環內的某些輸入中讀取。

在你只是重複而不檢索從freader任何輸入調用hasNextLine(其中僅返回一個boolean,它不修改流)的時刻,所以如果freader最初將其輸入中的另一個行hasNextLine總是返回true,你的循環本質上是while (true)

7

因爲你必須要消耗nextLine所以代碼應該是:

while (theScanner.hasNextLine()) { 
    String theLine = theScanner.nextLine(); 
} 

如果不調用nextLine()你總是會在同一行中觀看,它總是回答真到了那個。