gpt4 book ai didi

java - nextInt() 的扫描仪错误

转载 作者:行者123 更新时间:2023-12-01 18:29:45 26 4
gpt4 key购买 nike

我尝试使用 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 运行时环境检测到 fatal error : SIGSEGV (0xb) 位于 pc=0xb6bdc8a8,pid=5587,tid=1828186944

JRE 版本:7.0_07-b30 Java VM:OpenJDK Server 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() 方法将在以下条件下抛出这些异常:

  • InputMismatchException - 如果下一个标记与 Integer 不匹配 正则表达式,或者超出范围
  • NoSuchElementException - 如果输入已用尽
  • IllegalStateException - 如果此扫描仪已关闭

您可以使用 hasNextInt() 方法轻松修复此问题:

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

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

s.close();

关于java - nextInt() 的扫描仪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60183435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com