尝试Catch With Loop Java

时间:2017-02-12 02:14:42

标签: java loops try-catch

我是新的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;
}       

2 个答案:

答案 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