所以我为使用开关盒的用户准备了一个菜单。
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();
}
对于同一个流,您只能使用一个扫描仪(在您的情况下,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;