提问者:小点点

Java 开关盒菜单扫描仪[重复]


所以我为使用开关盒的用户准备了一个菜单。

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

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

对于选项3/4,我必须询问用户的某个最大值,我通过使用扫描仪来做到这一点,但是开关盒也使用了相同的int,这导致了错误。

我在线程“main”(这是我调用应用程序方法的地方)中得到一个异常,它在菜单打印得足够奇怪之前打印出来,我还在 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个答案

匿名用户

对于同一个流,您只能使用一个扫描仪(在您的情况下,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;