nextInt()的扫描程序错误
我试图使用扫描仪从键盘获取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处为SIGSEGV(0xb),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
无法编写核心转储。 核心转储已被禁用。 要启用核心转储,请在再次启动Java之前尝试“ulimit -c unlimited”
您应该使用Scanner
类中的hasNextXXXX()
方法来确保有一个可以读取的整数。
问题是你被称为nextInt()
,它从Scanner
对象所指向的流中读取下一个整数,如果没有要读取的整数(即如果输入用完则会看到NoSuchElementException
)
在JavaDocs中, nextInt()
方法将在以下条件下抛出这些exception:
- InputMismatchException – 如果下一个标记与Integer正则表达式不匹配,或者超出范围
- NoSuchElementException – 如果输入用尽
- IllegalStateException – 如果此扫描程序已关闭
您可以使用hasNextInt()
方法轻松解决此问题:
Scanner s = new Scanner(System.in); int choice = 0; if(s.hasNextInt()) { choice = s.nextInt(); } s.close();
- Hibernate Session方法saveOrUpdate()和merge()之间有什么区别?
- 我们可以在Java中的同一个switch语句中调用另一个案例中的“case”吗?
- Java Print API – 使用等宽的“Courier New”字体错误地打印空格字符
- 如何从Graphics2D捕获图形基元到SVG
- 为什么gif动画在paintComponent()中使用它时没有动画?
- 在Spring的Session Expiry之前执行自定义事件
- 如何在使用vararg和不使用vararg的方法之间消除Scala中的歧义
- 线程“main”中的exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:11
- JAXB将不需要的名称空间声明附加到标记