java - 使用 Scanner.hasNextInt 无限循环

标签 java java.util.scanner

我打印不同的选项,用户输入一个数字来选择正确的选项。第一次它有效,但是当选择一个选项时,它会根据所选选项打印不同的选项。当用户尝试从第二个打印列表中选择一个选项时,程序陷入无限循环。

protected int getIntegerInput(Scanner scan) {
    while (! scan.hasNextInt())
        ;
    return scan.nextInt();
}

protected <T> int getChoice(String description, List<T> list) {
    printPosibilities(description, list);
    while (true) {
        try (Scanner scan = new Scanner(System.in)) {
            int choice = getIntegerInput(scan) - 1;
            scan.close();
            if (isValidChoice(choice, list)) {
                if (choice == list.size()) {
                    System.out.println("Canceled.");
                    return CANCEL;
                }
                return choice;
            } else
                throw new IllegalArgumentException();
        }  catch (InputMismatchException | IllegalArgumentException e) {
            printInvalidChoice();
        }
    }
}

它卡在 getIntegerInput() 的 while 中。当打印可能的选项时调用 getChoice()。

编辑 我修好了它。您需要删除该尝试,因为它会自动关闭扫描仪。以及 while 循环中的 scan.next() 。

最佳答案

您需要使用来自扫描仪的输入

while (!scan.hasNextInt()) {
    scan.next(); // consume non-integer values
}

关于java - 使用 Scanner.hasNextInt 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680500/

相关文章:

java - 以编程方式将项目 JAR 部署到 Artifact

java - Struts 2 下载文件为 0 字节

java - 无法使用 java 从 MySQL 数据库 longblob 列获取 zip 文件

java - 扫描仪无法正常工作

java - 文件字数统计

路由器中没有转发端口的Java程序

java - 如何使用 GitHub 上的最新 gradle-ospackage-plugin

java - 使用扫描仪读取单个字符

Java 扫描器正则表达式 InputMistmastchException

Java System.in hasNext 方法仅在第一次调用时有效