[英]Try Catch With Loop Java
我是新来的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;
}
问题是,如果有人输入字母,则实际上会引发异常,而您会抓住它。 但是,这些字符不会从输入中删除。 因此,下次尝试读取输入时,您仍然会遇到字符,并且异常将再次引发。
添加一个sc.nextLine(); 在catch块中吃掉坏数据行。
这里的问题是
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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.