java - 扫描仪内部方法不等待答案

标签 java java.util.scanner

为此纠结了一天,来回看了论坛,无果。任何人都可以告诉我为什么第二次调用函数 aMenu() 返回零而不是等待新的用户输入?我尝试了各种方法,例如 hasNextInt()、nextLine(),但没有任何效果。在用户写东西之前, hasNextInt() 不应该阻塞吗?我该如何解决这个问题?谢谢。

package FirstJavaPackage;
import java.util.Scanner;

public class testScanner
{
    public static void main(String[] args)
    {
        int choice = aMenu();
        System.out.println("You typed: "+choice);
        choice = aMenu();
        System.out.println("You typed: "+choice);
    }

    public static int aMenu()
    {
        int result = 0;
        System.out.println("In aMenu... enter an int: ");
        Scanner keyboard = new Scanner(System.in);
        if (keyboard.hasNextInt())
            result = keyboard.nextInt();
        keyboard.close();
        return result;
    }
}

输出是:

在菜单...输入一个整数: 2个 您输入:2 在 aMenu... 输入一个整数: 您输入了:0

最佳答案

您需要在对 aMenu() 的调用中重复使用相同的 Scanner 对象:

public static void main(String[] args)
{
    Scanner keyboard = new Scanner(System.in);
    int choice = aMenu(keyboard);
    System.out.println("You typed: "+choice);
    choice = aMenu(keyboard);
    System.out.println("You typed: "+choice);
}

public static int aMenu(Scanner keyboard)
{
    int result = 0;
    System.out.println("In aMenu... enter an int: ");
    result = keyboard.nextInt();
    return result;
}

有关进一步讨论,请参阅 How to use multiple Scanner objects on System.in?

关于java - 扫描仪内部方法不等待答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15267017/

相关文章:

java - 无模式 OrientDb 中的关系

java - 当我取消订阅 Observable 链时会发生什么?

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 为什么Scanner类nextInt()++是语法错误?

java - 使用 Split 将所有新元素添加到带有混合输入的 ArrayList 中。

Java 在特定 session 中执行应用程序

java - MigLayout 对齐中心不会使 JLabel 组件居中

在方法上使用三元运算符的 Java 递归

java - 当尝试使用扫描仪读取多个输入时,我无法让它读取整数和字符

java - 使用扫描仪输入和正/负数的“while”无限循环