Scanner next()为某些联机编译器抛出NoSuchElementException

这似乎是一个常见问题(问多次),但我无法找到这种行为的解释。 以下代码在一个编译器中工作,但在另一个编译器Exception in thread "main" java.util.NoSuchElementException中抛出Exception in thread "main" java.util.NoSuchElementException

  Scanner s = new Scanner(System.in);
  System.out.println("Enter name: ");
  String name = s.next();
  System.out.println("Name is " + name);

测试在https://www.compilejava.net/和https://www.codechef.com/ide它引发异常。 但是,在一些编译器上它工作正常。 这种行为是否有任何理由(如JDK中的更改等)?


抛出此异常是因为枚举中没有更多元素。

请参阅文档:

由Enumeration的nextElement方法抛出,以指示枚举中不再有元素。


一些在线IDE不允许用户输入,在这种情况下,只要尝试读取用户输入,就会抛出异常。

  • 它适用于TutorialsPoint IDE,因为它允许用户输入。
  • 它不适用于codechef和compilejava IDE,因为这些IDE不支持用户输入。
  • 然而,在codechef上添加用户输入的次要方法。 只需在Custom Input复选框上打勾并提供任何输入即可。 然后它会编译。


    这种异常的另一个原因,即没有更多的用户输入,可以在调用s.next()之前通过检查s.hasNext()来查看扫描器是否有另一个令牌。

      Scanner s = new Scanner(System.in);
      System.out.print("Enter name: ");
      String name = null;
      if(s.hasNext())
          name = s.next();
      System.out.println("Name is " + name);
    

    根据rD。 回答这个问题的另一个解决方案是捕捉异常:

    Scanner s = new Scanner(System.in);
    System.out.print("Enter name: ");
    String name = "";
    try {
        name = s.next();
        System.out.println("Name is " + name);
    } catch (NoSuchElementException e) {
        System.out.println("You have to enter a name");
    }
    

    在在线IDE上工作时,应该在指定区域输入您的输入。 正如你已经给出的例子codechef有额外的输入字段(即自定义输入)。 但是一些在线IDE不支持像第一个链接IDE那样的自定义输入。 他们给错误。 (即java.util.NoSuchElementException

    在这里输入图像描述

    链接地址: http://www.djcxy.com/p/96087.html

    上一篇: Scanner next() throwing NoSuchElementException for some online compilers

    下一篇: Read ints from txt file java error