所以我有一个使用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();
}
答案 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;