2017-02-12 3 views
0

Ich bin neuer Java Student. Vielleicht verstehe ich nicht, wie try/catch wirklich funktioniert. Ich mache ein Java-Klassenspiel, den Henker. Und ich mache eine Methode, die die Anzahl der Spieler zurückgibt. Ich habe einen anderen Code, der perfekt funktioniert. Nur wenn ich Buchstaben und keine Int vorstelle, stürzt es ab. Ich habe versucht, dies zu machen. Ich hoffe du verstehst mich.Versuchen Catch With Loop Java

Antwort

0

Das Problem ist, wenn jemand Buchstaben eingibt, wird die Ausnahme tatsächlich geworfen, und Sie werden es fangen. Diese Zeichen werden jedoch nicht aus der Eingabe entfernt. Wenn Sie also das nächste Mal versuchen, die Eingabe zu lesen, haben Sie immer noch Zeichen, und die Ausnahme wird erneut ausgelöst.

Hinzufügen einer sc.nextLine(); im Catch-Block, um die schlechte Datenzeile aufzufressen.

+0

Danke, ich habe noch ein paar Korrekturen vorgenommen und nun funktioniert es perfekt. Darf ich den vollständigen Code des Spiels teilen? – LaGallinaTuruleta

0

Das Problem hier ist

nextInt(): Scannt das nächste Token des Eingangs als int

Wenn Sie Zeichen eingeben es Ausnahme auslöst und geht Block und das Programm stürzt ab zu fangen .

Verwenden Sie den folgenden Code

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(): Advances diesen Scanner über die aktuelle Zeile und gibt die Eingabe, die übersprungen wurde.

Einzelheiten siehe Scanner Java Doc.