2017-02-12 6 views
0

Я новый студент Java. Возможно, я не понимаю, как работает try/catch. Я делаю игру класса Java, палач. И я делаю метод, который возвращает количество игроков. У меня есть другой код, который отлично работает. Просто, если я представляю письма и нет Int, он падает. Я попытался сделать это. Надеюсь, вы меня поняли.Try Catch With Loop Java

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

Проблема в том, что если кто-то вводит буквы, исключение фактически будет выброшено, и вы поймаете его. Однако эти символы не удаляются из ввода. Поэтому в следующий раз, когда вы попытаетесь прочитать ввод, у вас все равно будут символы, и исключение будет сброшено снова.

Добавить sc.nextLine(); в блоке catch, чтобы съесть плохую строку данных.

+0

Спасибо, я сделал несколько исправлений и теперь, он работает идеально. Могу ли я поделиться полным кодом игры? – LaGallinaTuruleta

0

Проблема здесь

nextInt(): Сканирует следующий маркер ввода как INT

При вводе символа он бросает исключение, и идет, чтобы поймать блок и сбоев программы ,

Используйте следующий код

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.