Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java nextInt()的扫描仪错误_Java_Java.util.scanner - Fatal编程技术网

Java nextInt()的扫描仪错误

Java nextInt()的扫描仪错误,java,java.util.scanner,Java,Java.util.scanner,我试图使用Scanner从键盘获取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

我试图使用Scanner从键盘获取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=0xb6bdc8a8、pid=5587、tid=1828186944时的SIGSEGV(0xb)

JRE版本:7.0_07-b30 Java虚拟机:OpenJDK服务器虚拟机(23.2-b09混合模式linux-x86) 有问题的框架: V[libjvm.so+0x4258a8]java_lang_字符串::utf8_长度(oopDesc*)+0x58


无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

您应该使用
Scanner
类中的
hasNextXXXX()
方法来确保有一个整数可以读取

问题是您被称为
nextInt()

在JavaDocs中,
nextInt()
方法将在以下条件下抛出这些异常:

  • InputMismatchException-如果下一个标记与整数不匹配 正则表达式,或超出范围
  • NoTouchElementException-如果输入用尽
  • IllegalStateException-如果此扫描仪已关闭
您可以使用
hasNextInt()
方法轻松解决此问题:

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

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

s.close();

这让我进入了一个无限循环,因为括号内的内容永远不会得到called@spatara是,它检查扫描仪指向的下一个项目是否可以成功转换为整数,如果可以,则
hasNextInt()
将返回true,否则返回false。我只是从键盘读取,调用该方法时没有nextInt。我仍然被卡住…hasNextInt()返回false,因为它会在我键入int之前进行检查。@spatara它会尝试将打印的内容解释为整数