本问题已经有最佳答案,请猛点这里访问。
我正在尝试使用Scanner从键盘获取整数,但是出现以下错误:
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运行时环境检测到致命错误:
SIGSEGV(0xb)at pc = 0xb6bdc8a8,pid = 5587,tid = 1828186944
JRE版本:7.0_07-b30
Java虚拟机:OpenJDK服务器虚拟机(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)
在以下情况下,nextInt()方法将从JavaDocs中抛出以下异常:
InputMismatchException-如果下一个令牌与Integer不匹配
正则表达式,或超出范围
NoSuchElementException-如果输入已用尽
IllegalStateException-如果此扫描仪已关闭
您可以使用hasNextInt()方法轻松解决此问题:
Scanner s = new Scanner(System.in);
int choice = 0;
if(s.hasNextInt())
{
choice = s.nextInt();
}
s.close();
这使我陷入无限循环,因为方括号内的内容永远不会被调用
@spatara是,它将检查扫描程序指向的下一个项目是否可以成功转换为整数,如果可以,则hasNextInt()将返回true,否则返回false。
我只是从键盘上读取,调用该方法时没有nextInt
我仍然被困住... hasNextInt()返回false,因为它会在我键入int之前进行检查...
@spatara它尝试将您打印的内容解释为整数
但是它什么也没解释...什么也看不见,我能正确理解吗? 如果我没有输入任何内容,hasNextInt()将返回false,不是吗?
hasNextInt()将等待您的输入。 你试过了吗?
是的,我遇到了无限循环...也许其他地方有问题。
@spatara ..请参阅我的文章,以了解如何不陷入无限循环。