Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用扫描仪不断获取NoTouchElementException_Java_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪不断获取NoTouchElementException

Java 使用扫描仪不断获取NoTouchElementException,java,java.util.scanner,Java,Java.util.scanner,我正在尝试读取由空格分隔的字符串值。一旦我尝试将它们设置为一个变量,我就会得到一个NoTouchElementException错误。我以前也做过类似的事情,我必须用整数来代替,但从来没有得到过这个错误。做一些研究::它说hasNext是为了使用next()而实现的,而hasNextLine是为了使用nextLine()而实现的,所以我尝试用hasNext()替换hasNextLine(),但仍然没有结果。有人能帮忙吗 File fileName = new File("maze.txt");

我正在尝试读取由空格分隔的字符串值。一旦我尝试将它们设置为一个变量,我就会得到一个NoTouchElementException错误。我以前也做过类似的事情,我必须用整数来代替,但从来没有得到过这个错误。做一些研究::它说hasNext是为了使用next()而实现的,而hasNextLine是为了使用nextLine()而实现的,所以我尝试用hasNext()替换hasNextLine(),但仍然没有结果。有人能帮忙吗

File fileName = new File("maze.txt");
Scanner file = new Scanner(fileName);

while(file.hasNextLine()){
    String line = file.nextLine();
    Scanner scanner = new Scanner(line);

    //error starts from here
    String room = scanner.next();
    String roomName = scanner.next();
    String wall1 = scanner.next();
    String wall2 = scanner.next();
    String wall3 = scanner.next();
    String wall4 = scanner.next();
    scanner.close();
}
file.close();
maze.txt

room 101 wall door0 wall wall
room 404 door0 wall door1 wall
room 420 wall wall wall door1
door door0 0 1 close
door door1 1 2 open
错误:

Exception in thread "main" java.util.NoSuchElementException
 at java.util.Scanner.throwFor(Unknown Source)
 at java.util.Scanner.next(Unknown Source)
 at maze.SimpleMazeGame.main(SimpleMazeGame.java:96)

如果调用
next()
并且没有任何内容可读取,则将抛出异常
java.util.NoSuchElementException


文件中的最后两行似乎有5个值,而不是6个值,并且每行调用
next()
6次。

如果调用
next()
并且没有任何内容可读取,则会抛出异常
java.util.NoSuchElementException


文件中的最后两行似乎有5个值而不是6个值,并且每行调用
next()
6次。

就像有hasNextLine(),你也应该使用hasNextLine()。

就像有hasNextLine(),你也应该使用hasNext()。

你应该检查每一行
next()
hasNext()
。另外,我更喜欢从主文件夹中读取
mazes.txt
,而不是一个空的
close()
,并测试输入的空行。你可以这样做

File fileName = new File(System.getProperty("user.home"), "maze.txt");
try (Scanner file = new Scanner(fileName)) {
  while (file.hasNextLine()) {
    String line = file.nextLine();
    if (line.isEmpty()) {
      continue;
    }
    Scanner scanner = new Scanner(line);
    // error starts from here
    String room = scanner.hasNext() ? scanner.next() : "";
    String roomName = scanner.hasNext() ? scanner.next() : "";
    String wall1 = scanner.hasNext() ? scanner.next() : "";
    String wall2 = scanner.hasNext() ? scanner.next() : "";
    String wall3 = scanner.hasNext() ? scanner.next() : "";
    String wall4 = scanner.hasNext() ? scanner.next() : "";
  }
} catch (Exception e) {
  e.printStackTrace();
}

您应该使用
hasNext()
检查每个
next()
。另外,我更喜欢从主文件夹中读取
mazes.txt
,而不是一个空的
close()
,并测试输入的空行。你可以这样做

File fileName = new File(System.getProperty("user.home"), "maze.txt");
try (Scanner file = new Scanner(fileName)) {
  while (file.hasNextLine()) {
    String line = file.nextLine();
    if (line.isEmpty()) {
      continue;
    }
    Scanner scanner = new Scanner(line);
    // error starts from here
    String room = scanner.hasNext() ? scanner.next() : "";
    String roomName = scanner.hasNext() ? scanner.next() : "";
    String wall1 = scanner.hasNext() ? scanner.next() : "";
    String wall2 = scanner.hasNext() ? scanner.next() : "";
    String wall3 = scanner.hasNext() ? scanner.next() : "";
    String wall4 = scanner.hasNext() ? scanner.next() : "";
  }
} catch (Exception e) {
  e.printStackTrace();
}

输入文件中的数据存在问题。您的逻辑要求输入文件(maze.text)的每行中有六个值,但maze.text的第四行只有五个值。这就是它失败的原因。删除maze.text中的最后两行,现有代码将正常工作。否则,您需要在阅读wall4之前填写支票。像这样的

String wall4;
if(scanner.hasNext())
wall4 = scanner.next();

输入文件中的数据存在问题。您的逻辑要求输入文件(maze.text)的每行中有六个值,但maze.text的第四行只有五个值。这就是它失败的原因。删除maze.text中的最后两行,现有代码将正常工作。否则,您需要在阅读wall4之前填写支票。像这样的

String wall4;
if(scanner.hasNext())
wall4 = scanner.next();

正当并没有试图提供一个完整的解决方案。只是建议hasNext应该与hasNextLine一起使用。Guess不应该发布不完整的代码。对。并没有试图提供一个完整的解决方案。只是建议hasNext应该与hasNextLine一起使用。Guess不应发布不完整的代码。