2014-03-02 18 views
0

我有以下代碼:掃描儀在輸入文件的最後失敗

Scanner in = new Scanner(new FileReader("in.txt")); 

    while(in.hasNext()){ 
     System.out.println(in.nextLine()); 
     System.out.println(in.nextLine()); 
     System.out.println(in.nextDouble()); 
     System.out.println(in.nextDouble()); 
     System.out.println(in.nextDouble()); 

     System.out.println(in.nextLine()); 
    } 

凡in.txt的格式爲:

One Name 
Second Name 
double 
double 
double 
One Name 
Second Name 
double 
double 
double 
... 

然而,while循環就非常失敗輸入文件中的最後一行。它打印整個輸入文件,但是當它這樣做,我得到一個錯誤,指出:

Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Scanner.java:1585) 
    at start.Start.main(Start.java:22) 
Java Result: 1 

回答

3

hasNext()必須調用方法讀數前每一次,因爲在真實的情況下,這種方法可以保證有至少還有一個要讀的元素。您的閱讀應該是這樣的:

if (in.hasNext()) 
     System.out.println(in.nextLine()); 
    if (in.hasNext()) 
     System.out.println(in.nextLine()); 
    if (in.hasNext()) 
     System.out.println(in.nextDouble()); 
    if (in.hasNext()) 
     System.out.println(in.nextDouble()); 
    if (in.hasNext()) 
     System.out.println(in.nextDouble()); 

    if (in.hasNext()) 
     System.out.println(in.nextLine()); 
0

按照您的輸入文件中的模式是:

One Name 
Second Name 
double 
double 
double 

所以你的while循環必須在此模式以讀取該文件作爲

while(in.hasNext()){ 
    System.out.println(in.nextLine()); 
    System.out.println(in.nextLine()); 
    System.out.println(in.nextDouble()); 
    System.out.println(in.nextDouble()); 
    System.out.println(in.nextDouble()); 
} 
匹配

爲了更好地處理異常情況,您應該在按照@rendon的建議閱讀每行之前使用正確的hasNextXXX()方法。

希望這會有所幫助。

+0

那對'nextLine'額外調用該OP已經是處理後的第三雙結尾的換行;離開它實際上是不正確的。 –

0

重寫代碼,如下所示,將打印的所有值

while(in.hasNext()){ 
     System.out.println(in.nextLine()); 
    }