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.

  • It works on TutorialsPoint IDE because it allows user input.
  • It doesn't works on codechef and compilejava IDEs because these IDEs does not support 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 )

    在这里输入图像描述

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

    上一篇: 扫描仪next()混淆

    下一篇: Scanner next()为某些联机编译器抛出NoSuchElementException