java - 扫描仪不要求输入,抛出无此类元素异常 - 多个扫描仪

标签 java java.util.scanner nosuchelementexception

在下面的代码中,我使用了两个扫描仪,一个在performAction()方法中,一个在getTicketNumber()方法中。我已经对资源使用了 try ,一次当我进入 getTicketNumber() 方法时,它工作正常,一次当控件返回并进入 PerformAction() 时,我在执行 Scanner.nextInt() 行时收到 No Such Element Exception 。我想继续这个过程,直到我按下退出键。我想这是由于使用了多个扫描仪,因为如果我不进入 getTicketNumber() 方法,它就可以正常工作。有什么想法吗?

private void performAction() {
    int choice = 4;
    System.out.println("Hi User");
    System.out.println("What do you want to do ");
    try (Scanner scanner = new Scanner(System.in)) {
        do {
            System.out.println("1. Book ticket");
            System.out.println("2. Cancel ticket");
            System.out.println("3. Check status");
            System.out.println("4. Exit");
            System.out.println("Enter your choice");
            choice = scanner.nextInt();
            System.out.println();
            doActionBasedOnChoice(choice);
            System.out.println();
        } while (choice != 4);

    } catch (InputMismatchException e) {
        System.out.println("Please enter a valid choice");
    }
}

private void doActionBasedOnChoice(int choice) {

    switch (choice) {
    case 1:
        ticketReservation.bookFlight();
        break;
    case 2:
        System.out.println("Please enter your ticket number ");
        int ticketNumber = getTicketNumber();
        ticketReservation.cancel(ticketNumber);
        break;
    case 3:
        ticketReservation.checkConfirmedListStatus();
        break;
    case 4:
        System.out.println("Thank you ");
        break;
    default:
        break;
    }
}

private int getTicketNumber() {
    try (Scanner scanner = new Scanner(System.in)) {
        int choice = scanner.nextInt();
        return choice;
    } catch (InputMismatchException e) {
        System.out.println("Please enter a valid ticekt number");
    }
    return 0;
}

最佳答案

当“内部”扫描器超出范围时,它会被 try block 处理,进而关闭 System.in 流。

通过将扫描仪交给需要它的人来解决,或者将其移至更高的范围。

关于java - 扫描仪不要求输入,抛出无此类元素异常 - 多个扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52620428/

相关文章:

java - 有没有办法在 SonarQube 中添加额外的代码指标而无需编写我自己的插件?

java - 如何将 java.util.Calendar 和 HQL 结合起来

java - 从 Java 的角度来看, 'self' 和 'new' 在 Ruby 中意味着什么?

Java [基础] 对象问题

java - 我的 Java 代码中不断出现 NoSuchElement 异常。我的代码有什么问题吗?

java - 将 xml 文档作为参数传递给 xsl

此处不允许 java.util.Scanner 对象声明

java - 获取字符串的一部分

java - 为什么我收到 NoSuchElementException?

Java:java.util.NoSuchElementException:找不到行