java - 在带有可重新加载菜单的方法中使用扫描仪

标签 java methods menu java.util.scanner

我无法让我的可重载方法“菜单”工作,看起来它与扫描仪有关。

我确定这是一个简单的解决方案,但我就是找不到

 public class menuControl
{

    public static void main(String[] args)
{
        switch (menu())
        {
        case 1: System.out.println(1); menu();break;
        case 2: System.out.println(2); menu();break;
        case 3: System.out.println(3); menu();break;
        case 4: System.out.println(4); menu();break;
        case 0: System.out.println(0); menu();break;
        }
}
    public static int menu()
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Choice 1");
        System.out.println("Choice 2");
        System.out.println("Choice 3");
        System.out.println("Choice 4");
        System.out.print("Choose: ");
        int choice = in.nextInt();
        System.out.println();
        in.close(); 
        if (choice > 0 && choice < 5)
        {
            return choice;
        }
        else
        {
            System.out.println("Wrong choice!");
            return 0;
        }
    }
}

我收到此错误消息:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Cashmachine.menu(Cashmachine.java:47) //The line"int choice = in.nextInt();"
    at Cashmachine.main(Cashmachine.java:23) //The line "case 1: System.out.println(1); menu();break;"

最佳答案

删除 in.close()。你的 Scanner 包裹了全局 System.in,一旦你 close() 它你将无法使用 nextInt()

您可以将 Scanner 提取到一个字段(或参数)中,例如

public static int menu(Scanner in) {
    // Scanner in = new Scanner(System.in);
    // ...
    // in.close();
    // ...

我想你想要在 main() 中有一个循环,比如

Scanner in = new Scanner(System.in);
for (;;) {
    switch (menu(in)) {
    case 1:
        System.out.println(1);
        break;
    case 2:
        System.out.println(2);
        break;
    case 3:
        System.out.println(3);
        break;
    case 4:
        System.out.println(4);
        break;
    case 0:
        System.out.println(0);
        break;
    }
}

关于java - 在带有可重新加载菜单的方法中使用扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157807/

相关文章:

objective-c - 类别中重写的方法是否始终优先于原始实现?

javascript - 向javascript中的方法添加方法

html - 左右两侧等距 CSS 菜单齐平

java - 将多个特定文件作为来自另一个 java 程序的一个字符串 arg 传递

java - spurios 唤醒是否伴随着 InterruptedException?

methods - Java 8 中方法引用和 lambda 的类型

jquery - 多级推送菜单问题,链接不可点击

html - 如何在只有 html 和 css 的表单中创建水平选择器?

java - 定义多维数组

java - 返回从一个类调用到另一个类的列表