Java nextInt()的扫描仪错误
我试图使用Scanner从键盘获取int,但出现以下错误: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
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它会尝试将打印的内容解释为整数