代码:
public void menuAdmin() throws IOException {
Scanner input = new Scanner(System.in);
Paciente paciente;
int choice;
// try {
do {
System.out.println("Ingrese una opcion:");
System.out.println("1 - Buscar paciente por DNI");
System.out.println("2- Crear nuevo paciente");
System.out.println("3- Modificar un paciente");
System.out.println("4- Eliminar paciente");
System.out.println("5- Salir");
choice = input.nextInt(); //HERE IS THE ISSUE
} while (choice < 1 || choice > 5);
switch (choice) {
case 1:
paciente = (Paciente) func.buscarPacienteDni();
System.out.println();
if (paciente == null){
menuAdmin();
}else{
menuX(paciente.getIdUser());
}
break;
case 2:
func.registrarse();
menuAdmin();
break;
case 3:
func.modifPaciente();
break;
case 4:
func.elimPaciente();
break;
case 5: func.exit();
}
// } catch (Exception ex) {
// System.out.println(ex.getMessage());
// }
input.close();
}
输出
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 clases_basicas.Opciones.menuAdmin(Opciones.java:58)
at clases_basicas.Opciones.menuAdmin(Opciones.java:68)
at clases_basicas.Main.main(Main.java:29)
阅读一些有关此内容的文章,我了解发生了什么。 Switch正在使用可能为空的参数,因此我应该使用 input.hasNextInt()首先进行检查。我试图花一段时间检查一下,但一直循环播放。
如何防止用户选择无效的内容并检查nextInt()是否为空?
此外,我了解到input.close可能是问题所在,所以什么时候应该关闭扫描仪?在每种方法的结尾还是其他地方?