尝试用循环Java捕获

尝试用循环Java捕获,java,loops,try-catch,Java,Loops,Try Catch,我是Java的新学生。 也许我不明白try/catch到底是如何工作的。 我正在制作一个Java类游戏,刽子手。 我正在制作一个方法,返回玩家的数量。 我有另一个代码,它可以完美地工作。如果我引入字母而没有Int,它就会崩溃。我试着做这个。 我希望你能理解我 public static int setNumJugadores() { Scanner sc = new Scanner(System.in); int numJugador=0; System.out.prin

我是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;
}       
publicstatic int setNumJugadores(){
扫描仪sc=新的扫描仪(System.in);
int numJugador=0;
System.out.println(“引子卡·埃尔·努梅罗·德·朱加多斯·朱加尔:”);
//变数:试捕
布尔bError=false;
布尔mayorQueCero=false;
做{
试一试{
numJugador=sc.nextInt();
}
捕获(例外e){
bError=真;
System.out.println(“错误,引入了一个无编号的肠”);
}
if(numJugador<1){
System.out.println(“错误,引入值为0”);
}
否则{
mayorQueCero=真;
}
}而(!mayorQueCero)| |(!bError));
返回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():使此扫描仪前进超过当前行并返回跳过的输入


有关详细信息,请参阅。

谢谢,我做了更多的修复,现在,它工作得非常完美。我可以分享游戏的全部代码吗?