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;
        }
    }
}