2015-04-25 71 views
0

所以我想讀取文本文件中每行的前4個變量。NoSuchElementException從文件讀取

但它抓住了NoSuchElementException

public static void readRecords() 
    { 
     System.out.printf("%s%s%s%s" , "Team Id", "TeamNAme","CoachFirst", "CoachLast"); 
     try 
     { 
      while (input.hasNext()) 
      { 
       System.out.printf("%s%s%s%s",input.nextInt(),input.next(),input.next(),input.next()); 

      } 

     } 
     catch (NoSuchElementException statException) 
     { 
      System.err.println("File improperly formed."); 
     } 
     catch (IllegalStateException stateException) 
     { 
      System.err.println("ERROR READING FROM FILE"); 
     } 
    } 

關於爲什麼會發生這種情況的任何想法?

這是文本文件中的元素:

TeamNumber,Team Name,Coach First,Coach Last,Mentor First,Mentor Last,Team Fin Sponsor,Schools or Sponsoring Organization,TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last 
6842,Reagan Ray-Guns,Judy,Mallon,Aziz,Valdez,Texas Workforce Commission,REAGAN H S,Steven,Cepeda,Alan,Yue,Tim,Callaway,Damon,Bertucci,Samuel,de Olvieira,Samuel,Day,,,, 
6888,Islanders,Judy,Maldonado,Brady,Trevino,Three Rivers Robotics,THREE RIVERS MIDDLE,Shireen,Cowdrey,Dee,Roundtree,Steven,Callaway,Francisco,Bermea,,,,,,,, 
7004,GREENHILL Tops,Kanat,LaBass,Harvey,Pflueger,GREENHILL Boosters,GREENHILL SCHOOL,Harvey,Pflueger,Sandra,Day,Denny,Rodriguez,shirley,Couvillon,Carly,Szarka,,,,,, 
+0

你能給我發送樣本輸出嗎? –

+0

在while循環中移動try catch,你應該很好。另外,您可以跳過輸入的第一行,因爲它代表標題。 – CKing

+0

如何初始化輸入?爲什麼你在所有四個字段使用'nextInt()'? – pathfinderelite

回答

0

那麼,您正在閱讀4個變量,但示例文本文件中的每行都有4個以上的條目(假設您使用,作爲掃描器分隔符)。這意味着您需要撥打Scanner#nextLine()跳過線路上其餘的輸入。

public static void readRecords() 
{ 
    System.out.printf("%s%s%s%s" , "Team Id", "TeamNAme","CoachFirst", "CoachLast"); 
    try 
    { 
     while (input.hasNext()) 
     { 
      System.out.printf("%s%s%s%s",input.nextInt(),input.next(),input.next(),input.next()); 
      input.nextLine(); // skip remainder of line 
     } 

    } 
    catch (NoSuchElementException statException) 
    { 
     System.err.println("File improperly formed."); 
    } 
    catch (IllegalStateException stateException) 
    { 
     System.err.println("ERROR READING FROM FILE"); 
    } 
} 
1

你已經得到了下一個元素(hasNext())方法的單次檢查,但隨後,調用nextInt()四次。

你應該檢查是否有更多的整數,每次你調用nextInt()。改爲使用hasNextInt()

+0

這是不需要的,如果他可以確定每個記錄只有四個字段,但它肯定更安全。 – pathfinderelite

0

您輸入的第一行實際上並不以int開頭,因此調用nextInt()將失敗。想必先閱讀下面的實際數據,然後再跳過該行。

+0

是的,這是我編輯它的錯字@MarcFraioli – DkgMarine