2014-06-30 70 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

相关问题