一尘不染

扫描器的next()抛出NoSuchElementException对于某些在线编译器

java

这似乎是一个常见问题(多次提出),但我无法找到对此行为的解释。下面的代码工作在一个编译器,但抛出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);

Tested on <https://www.compilejava.net/> and<https://www.codechef.com/ide>上测试,它
会引发异常。但是,在某些编译器上,它可以正常工作。是否有任何
这种行为的原因(例如JDK的更改或其他原因)?


阅读 197

收藏
2020-09-08

共1个答案

一尘不染

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

请参阅该文档:

由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);
2020-09-08