Java开关案例菜单扫描器

时间:2015-07-28 12:38:51

标签: java

所以我有一个使用switch case的用户菜单。

public static void app() {
    Scanner sc = new Scanner(System.in);
    List list = list.read(file.txt);
    StringBuilder menu;
    int choice = 0;
    do {
        System.out.println(menu.toString());

        choice = sc.nextInt();
        switch (choice) {
        case 1:
            option1();
            break;
        case 2:
            option2();
            break;
        case 3:
            option3(list);
            break;
        case 4:
            option4(list);
            break;
        case 5:
            break;
        default:
            break;
        }
    } while (choice != 5);
}

前两个选项只是方法(在这个类之外),允许我添加另一个对象到列表中我没有任何问题2.选项3/4也有效,但它会导致一些问题开关盒菜单。

对于选项3/4,我必须询问用户的某个最大值,我使用扫描仪进行操作,但是开关盒也会使用相同的int,这会导致错误。

我在线程“main”(我称之为app方法)中得到一个异常,它在菜单被打印得很奇怪之前被打印出来并且我在choice = sc.nextInt()行也得到了NoSuchElementException

我考虑过在调用方法之前关闭扫描仪并在之后重新打开它,但这是不可能的。

public static void option3(list input) {
    Scanner sc = new Scanner(System.in);
    System.out.println(question);
    int max = sc.nextInt();
    int size = input.size();
    if (size > 0) {
        if (max == 0) {
            print entire list
        } else {
            print list below max
        }

    }
    sc.close();

}

1 个答案:

答案 0 :(得分:1)

您应该只为同一个流使用一个扫描程序(在您的情况下为System.in)。您可以将扫描仪传递给方法并在那里使用:

public static void option3(list input, Scanner sc) {
    System.out.println(question);
    int max = sc.nextInt();
    int size = input.size();
    if (size > 0) {
        if (max == 0) {
            print entire list
        } else {
            print list below max
        }

    }
}

在您的app()方法中:

  case 3:
        option3(list, sc);
        break;