2014-06-30 109 views
0

我有這樣的代碼(是一個文件掃描儀):文件掃描NoSuchElementException異常

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50; j++) { 
     System.out.println(i+", "+j); 
     String se = in.next(); 
     char c = se.charAt(0); 
     maze[i][j] = c; 
     } 
    } 
} 

我每次運行它的時候它在0,49結束,然後給了我一個NoSuchElementException。如果我將for循環中的50減少到49,則它停在1,0並引發異常。發生什麼事?我在做什麼?

此外,如果您必須知道,我正在閱讀的文件是文本的50x50牆。

+0

究竟是什麼?它可能會將整行文本讀入字符串「se」? – Caleryn

+0

@Caleryn in = new Scanner(new File(「C://Users//Dragon//Desktop//maze//Maze.txt」)); – user3042719

+0

@Caleryn是的,它正在閱讀一整行!我將如何讓它只讀一個字符? – user3042719

回答

0

您的while循環沒有充分檢查掃描器是否可以實際讀取下一行。每次調用scanner.next()之前都應該先調用scanner.hasNext()(以確保您正在讀取的輸入實際存在)。您的代碼每50 * 50次讀取一次。爲了解決這個問題,你將要停止循環,如果輸入不存在,要麼通過執行類似

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50; j++) { 
      if(!in.hasNext()) 
       break; 
      System.out.println(i+", "+j); 
      String se = in.next(); 
      char c = se.charAt(0); 
      maze[i][j] = c; 
     } 
    } 
} 

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50&&in.hasNext(); j++) { 
      System.out.println(i+", "+j); 
      String se = in.next(); 
      char c = se.charAt(0); 
      maze[i][j] = c; 
     } 
    } 
} 

這都應該呼籲下次輸入前檢查存在,並退出循環,如果沒有。

+0

謝謝,但我想我應該澄清一點,我試圖閱讀一個字符。我實際上應該使用BufferedReader,不是嗎? – user3042719

+0

@ user3042719您可能可以使用BufferedReader,儘管首先將整個文件讀入一個大字符串(使用掃描器)可能更容易,然後使用char解析該char。 – clearlyspam23

+0

好的,我會的!謝謝! – user3042719

相關問題