这似乎是一个常见问题(多次提出),但我无法找到对此行为的解释。下面的代码工作在一个编译器,但抛出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);
Tested on <https://www.compilejava.net/> and<https://www.codechef.com/ide>上测试,它 会引发异常。但是,在某些编译器上,它可以正常工作。是否有任何 这种行为的原因(例如JDK的更改或其他原因)?
<https://www.compilejava.net/>
<https://www.codechef.com/ide>
抛出此异常是因为枚举中没有其他元素。
请参阅该文档:
由Enumeration的nextElement方法抛出,以指示该枚举中没有更多元素。
一些在线IDE根本不允许用户输入,在这种情况下, 当您尝试读取用户输入时会抛出异常。
它可在TutorialsPoint IDE 上使用,因为它允许用户输入。它不适用于codechef和compilejava IDE,因为这些IDE不支持用户输入。但是,还有第二种方法可以在codechef上添加用户输入。只需在Custom Input复选框上打勾并提供任何输入即可。然后它将编译。
TutorialsPoint IDE
Custom Input
发生此异常的另一个原因,即根本没有更多的用户输入,可以通过在调用之前s.next()检查s.hasNext()一下扫描程序是否还有另一个令牌来处理。
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);