我有这段代码( 是文件扫描程序):
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的文字墙。
答案 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之前检查输入是否存在,如果不存在则退出循环。