我是新的Java学生。 也许我不明白try / catch是如何工作的。 我正在制作一个Java类游戏,刽子手。 我正在制作一种能够返回玩家数量的方法。 我有另一个完美的代码。就在我引入字母而不是Int时,它会崩溃。我试着做这个。 我希望你理解我。
public static int setNumJugadores() {
Scanner sc = new Scanner(System.in);
int numJugador=0;
System.out.println("Introduzca el número de jugadores a jugar: ");
// VARIABLES PARA EL TRY CATCH
boolean bError=false;
boolean mayorQueCero=false;
do {
try{
numJugador = sc.nextInt();
}
catch (Exception e){
bError=true;
System.out.println("Error, introduzca un numero entero.");
}
if (numJugador < 1) {
System.out.println("ERROR, introduzca un valor valido mayor de 0");
}
else{
mayorQueCero=true;
}
} while ((!mayorQueCero)||(!bError));
return numJugador;
}
答案 0 :(得分:0)
问题是,如果有人输入信件,事实上会抛出异常,你会抓住它。但是,这些字符不会从输入中删除。因此,下次尝试读取输入时,您仍然会有字符,并且会再次抛出异常。
添加sc.nextLine();在catch块中吃掉了不好的数据线。
答案 1 :(得分:0)
这里的问题是
nextInt():将输入的下一个标记扫描为int
当你输入字符时,它会抛出异常并进入catch块并且程序崩溃。
使用以下代码
public static int setNumJugadores() {
Scanner sc = new Scanner(System.in);
String numJugador=null;
System.out.println("Introduzca el número de jugadores a jugar: ");
// VARIABLES PARA EL TRY CATCH
boolean bError=false;
boolean mayorQueCero=false;
do {
try{
numJugador = sc.nextLine();
}
catch (Exception e){
bError=true;
numJugador = null;
System.out.println("Error, introduzca un numero entero.");
}
if (numJugador == null) {
System.out.println("ERROR, introduzca un valor valido mayor de 0");
}
else{
mayorQueCero=true;
}
} while ((!mayorQueCero)||(!bError));
return numJugador;
}
nextLine():使此扫描程序超过当前行并返回跳过的输入。
有关详细信息,请参阅Scanner Java Doc。