与nextInt()[重复]扫描仪错误(Scanner error with nextInt() [

2019-06-18 12:22发布

这个问题已经在这里有一个答案:

  • 如何使用java.util.Scanner的正确读取从System.in用户输入并采取行动呢? 1个回答

我想用扫描仪获取从键盘int,但我发现了以下错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at TableReader.mainMenu(TableReader.java:122)
    at TableReader.main(TableReader.java:76)

这是我有。 这是我的独立程序的其余部分,我不明白为什么这是行不通的。 这是一个正被调用在一个while循环方法宣布,有没有什么帮助。

    // scan for selection
    Scanner s = new Scanner(System.in);
    int choice = s.nextInt();           // error occurs at this line
    s.close();

我通过加强与调试,并缩小了误差降低到:

由Java运行时环境已经检测到致命错误:在PC SIGSEGV(0XB)= 0xb6bdc8a8,PID = 5587,TID = 1828186944

JRE版本:7.0_07-B30的Java VM:OpenJDK的服务器VM(23.2-B09混合模式的linux-x86)的有问题的帧:V [libjvm.so + 0x4258a8] java_lang_String :: utf8_length(oopDesc *)+将0x58

无法写入核心转储。 核心转储已被禁用。 为了使核心转储,尝试“的ulimit -c无限”再次启动之前的Java

Answer 1:

您应该使用hasNextXXXX()从方法Scanner类,以确保有一个整数准备好被读取。

问题是你被称为nextInt()从流中读取下一个整数的Scanner对象指向,如果没有整数那里读(即,如果输入信息已耗尽,那么你将看到NoSuchElementException

从JavaDoc中的nextInt()方法将抛出这些条件下,这些异常:

  • InputMismatchException - 如果下一个标记不匹配Integer正则表达式,或者超出范围
  • NoSuchElementException - 如果输入信息已耗尽
  • IllegalStateException - 如果此扫描器已关闭

你可以解决这个问题很容易地使用hasNextInt()方法:

Scanner s = new Scanner(System.in);
int choice = 0;

if(s.hasNextInt()) 
{
   choice = s.nextInt();
}

s.close();


文章来源: Scanner error with nextInt() [duplicate]