Java 文件扫描程序NoTouchElementException
我有以下代码(中的是一个文件扫描程序):Java 文件扫描程序NoTouchElementException,java,Java,我有以下代码(中的是一个文件扫描程序): while(在.hasNext()中){ 对于(int i=0;i
while(在.hasNext()中){
对于(int i=0;i<50;i++){
对于(int j=0;j<50;j++){
系统输出println(i+“,”+j);
字符串se=in.next();
字符c=se.charAt(0);
迷宫[i][j]=c;
}
}
}
每次我运行它,它都会在0,49结束,然后给我一个NosTouchElementException。如果我将for循环中的50减少到49,它将停止在1,0并抛出异常。发生了什么事?我在干什么
另外,如果您必须知道,我正在读取的文件是一个50x50的文本墙。您的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(在.hasNext()中){
对于(int i=0;i<50;i++){
对于(int j=0;j<50;j++){
如果(!in.hasNext())
打破
系统输出println(i+“,”+j);
字符串se=in.next();
字符c=se.charAt(0);
迷宫[i][j]=c;
}
}
}
或
while(在.hasNext()中){
对于(int i=0;i<50;i++){
对于(int j=0;j<50&&in.hasNext();j++){
系统输出println(i+“,”+j);
字符串se=in.next();
字符c=se.charAt(0);
迷宫[i][j]=c;
}
}
}
在调用next之前,应该检查输入是否存在,如果不存在,则退出循环。确切地说,中的
是什么?它可能正在将整行文本读入字符串se
?@Caleryn in=new Scanner(新文件(“C://Users//Dragon//Desktop//maze//maze.txt”)@Caleryn啊,是的,它读了一整行!我怎么才能只读一个字符呢?考虑一下<代码> SE。或者,读取nextByte()
并将其转换为字符,您可能需要担心字符编码,对于后者。@Caleryn我将这样做。谢谢谢谢,但我想我应该澄清一下,我试图一次读一个字符。实际上我应该使用BufferedReader,不是吗?@user3042719您可能可以使用BufferedReader,不过首先将整个文件读入一个大字符串(使用扫描仪),然后逐个字符解析可能会更容易。好的,我会这样做!谢谢
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;
}
}
}