3

已经为此苦苦挣扎了一天,来回阅读论坛,没有结果。任何人都可以告诉我为什么函数 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;
    }
}

输出是:

在 aMenu... 中输入一个整数:2 您输入:2 在 aMenu... 输入一个整数:您输入:0

4

3 回答 3

1

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

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;
}

如需进一步讨论,请参阅如何在 System.in 上使用多个 Scanner 对象?

于 2013-03-07T09:10:40.543 回答
0

由于scanner.close将关闭整个输入源,您应该将扫描仪传递给您的 aMenu 方法并执行以下操作:

import java.util.Scanner;

public class TestScanner
{
   public static void main(String[] args)
   {
      Scanner keyboard = new Scanner(System.in);
      int choice = 0;

      do
      {
         choice = aMenu(keyboard);
         System.out.println("You typed: " + choice);
      } while (choice > 0);

      keyboard.close();
    }

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

        if (keyboard.hasNextInt())
           result = keyboard.nextInt();

        return result;
    }
}
于 2013-03-07T09:22:57.380 回答
0

在第一次调用之后,您实际上关闭了System.in输入流。

Scanner.close()文档:

When a Scanner is closed, it will close its input source if the source 
implements the Closeable interface.

尽量不要在close你的扫描仪末尾aMenu:在方法之外初始化扫描仪aMenu并让方法使用它。

于 2013-03-07T09:14:06.897 回答