文件扫描程序nosuchelementexception

时间:2014-06-30 16:21:20

标签: java

我有这段代码( 是文件扫描程序):

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循环中的50s减少到49,它将停止在1,0并抛出异常。怎么了?我在做什么?

另外,如果您必须知道,我正在阅读的文件是50x50的文字墙。

1 个答案:

答案 0 :(得分: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;
        }
    }
}

应该在调用next之前检查输入是否存在,如果不存在则退出循环。