Scanner next() throwing NoSuchElementException for some online compilers
This seems be a common question (asked multiple times) yet I'm not able to find an explanation for this behaviour. Following code works in one compiler but throws Exception in thread "main" java.util.NoSuchElementException
in another compiler
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 it throws exception. However, on some compilers it works fine. Is there any reason for this behaviour (like change in JDK or something)?
This exception gets thrown because there are no more elements in the enumeration.
See the documentation:
Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration.
Some online IDEs don't allow user input at all, in which case the exception will get thrown as soon as you try to read user input.
However there's secondary way to add user input on codechef. Just tick mark on Custom Input
checkbox and provide any input. It will then compile.
Another reason for this exception, ie there simply not being more user input, can be handled by, before calling s.next()
, just checking s.hasNext()
to see whether the scanner has another token.
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);
According to rD. answer another solution for the problem would be catching the exception:
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");
}
You should enter your input in specified area for it while working on online IDEs. As you have given the example codechef
has extra field for the input(ie custom input). But some of online IDEs don't support custom input as in your first linked IDE. They give error. (ie java.util.NoSuchElementException
)
上一篇: 扫描仪next()混淆