2010-08-23 30 views
5

Estoy aprendiendo JAVA y tengo algunos problemas con esta parte particular de mi código. Busqué en varios sitios y he probado muchos métodos diferentes, pero parece que no puedo encontrar la forma de implementar uno que funcione para las diferentes posibilidades.Validación de entrada de usuario para JOptionPane.showInputDialog

int playerChoice = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number for corresponding selection:\n" 
       + " (1) - ROCK\n (2) - PAPER\n (3) - SCISSORS\n")) - 1; 

imagino que necesitan tener algún tipo de validación incluso para cuando el usuario no tiene entrada, así como una entrada que no es 1, 2 ó 3. Cualquier persona tiene sugerencias sobre cómo puedo lograr esto?

He intentado un bucle while, una instrucción if para comprobar nulo antes de convertir la entrada a un entero, así como algunos tipos diferentes de if else si los métodos.

¡Gracias de antemano!

Respuesta

2

Lea la sección del tutorial de Swing en How to Make Dialogs, que en realidad le muestra cómo utilizar JOptionPane fácilmente, por lo que no necesita validar la entrada.

Existen diferentes enfoques que podría utilizar. Puede usar un cuadro combinado para mostrar las opciones o tal vez varios botones para seleccionar una opción.

El tutorial también le muestra cómo "detener el cierre automático del diálogo" para que pueda validar la entrada de los usuarios.

5

que tiene que hacer algo como esto para manejar mal de entrada:

boolean inputAccepted = false; 
while(!inputAccepted) { 
    try { 
    int playerChoice = Integer.parseInt(JOption.... 

    // do some other validation checks 
    if (playerChoice < 1 || playerChoice > 3) { 
     // tell user still a bad number 
    } else { 
     // hooray - a good value 
     inputAccepted = true; 
    } 
    } catch(NumberFormatException e) { 
    // input is bad. Good idea to popup 
    // a dialog here (or some other communication) 
    // saying what you expect the 
    // user to enter. 
    } 

    ... do stuff with good input value 

}

Cuestiones relacionadas