java中扫描仪关闭语句_关于Java:nextInt()的扫描仪错误

本问题已经有最佳答案,请猛点这里访问。

我正在尝试使用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 ..请参阅我的文章,以了解如何不陷入无限循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值