Problema básico aquí.. voy a empezar por pedir que por favor no responder con cualquier código, ya que probablemente sólo me confundan más a la programación de noob). Estoy en busca de una explicación clara sobre cómo resolver este problema que estoy teniendo.

Tengo un scanner que lee la entrada del usuario. Se pide al usuario que introduzca un valor entero entre 1 a 150 (sólo números enteros). Puedo obtener el valor de la siguiente manera:

    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

Y continuar con mi programa, y todo funciona bien.

Por desgracia, el código no se exactamente a prueba de balas, ya que cualquier entrada que no es un número entero puede romper (letras, símbolos, etc).

¿Cómo puedo hacer el código más robusto, se podría comprobar que sólo un int fue introducido?

Estos son los resultados que estoy esperando:

Digamos que la entrada era:

23 -> valid
fx -> display an error message, ask the user for input again (a while loop would do..)
7w -> error, again
3.7 -> error
$$ -> error
etc
InformationsquelleAutor John Smith | 2012-10-29

7 Comentarios

  1. 12

    El escáner.hasNextInt() devuelve true si el siguiente token es un número, devuelve false lo contrario.

    En este ejemplo, yo llame hasNextInt(). Si devuelve true, me voy a pasado el tiempo y ajuste la entrada; si devuelve false, entonces me descartar la entrada (scanner.next();) y repita.

    Scanner scan = new Scanner(System.in);
    while(!scan.hasNextInt()) {
        scan.next();
    }
    int input = scan.nextInt();
    • -1 Si el usuario introduce un no-entero, el código se bloquea y nunca se recuperan: scanner.hasNextInt() no avanzar más allá de la entrada, y si en la siguiente entrada es un no-int, scanner.hasNextInt() siempre devolverá false, incluso si el usuario entra después de un número entero
    • Cierto, gracias, he corregido el código para descartar la no-int entradas.
    • +1 ahora. Mucho mejor
    • Creo que significaba para escaneo de escritura, no de escáner, en el bucle while (dos veces), pero por lo demás, gracias!
  2. 3

    He aquí un ejemplo simple con mensajes y comentarios.

    Scanner scan = new Scanner(System.in);
    System.out.print("Enter an integer: "); //Initial prompt for input
    
    //Repeat until next item is an integer
    while (!scan.hasNextInt()) 
    {        
        scan.next(); //Read and discard offending non-int input
        System.out.print("Please enter an integer: "); //Re-prompt
    }
    
    //At this point in the code, the user has entered an integer
    int input = scan.nextInt(); //Get the integer
    
    //And now you can use the input variable.
  3. 1

    Uso scan.hasNextInt() para asegurarse de que la siguiente entrada es una int.

    • Si el usuario entra un no-entero, el código se bloquea y nunca se recuperan: scanner.hasNextInt() no avanzar más allá de la entrada, y si en la siguiente entrada es un no-int, scanner.hasNextInt() siempre devolverá false, incluso si el usuario entra después de un número entero
    • No me dan ninguna de las sugerencias de como para usarlo, usted acaba de copiar esto de ignis…
  4. 0

    Acaba de obtener «algo» y analizarlo:

    Scanner scan = new Scanner(System.in);
    
    Integer number = null;
    while (number == null) {
        try {
            number = Integer.parseInt(scan.next());
        } catch (NumberParseException e) {
            System.out.println("bad input: " + input);
        }
    }
  5. 0

    Sin código y sólo en inglés, yo diría que hay dos cosas que tienes que probar o mirar hacia fuera para. Primero, que la entrada es un int, segundo que el int se encuentra dentro del rango correcto.

    En términos de pseudocódigo, la primera cosa a hacer es asegurarse de que es un int. Declarar de int llamado «entrada», me gustaría poner un bloque try /catch, donde intenta buscar en la entrada del usuario, como un int, con parseInt(). Si una parte falla, usted sabe que no es un int y devuelve un mensaje de error.

    Entonces, ahora que usted sabe que la «entrada» es un int, puede probar si es menor que 1 o más de 150, y devolver un mensaje de error si es así!

  6. 0

    He escrito un ejemplo en el que asegura que el programa va a continuar sólo si un número y no un valor no válido es introducido. No te preocupes, he añadido el deseado explicación.

    El programa pide al usuario que ingrese un número. Un bucle se asegura de que el proceso no vaya en hasta un número válido entró. Antes de que me ha definido una variable «inputAccepted» que ha false como valor predeterminado. Si ingresa un número, la variable «inputAccepted» se establece en true y el programa sale del bucle. Pero si entra algo más que un número, se produce una excepción en este mismo momento, y en la línea que establece la variable «inputAccepted» a la verdadera voluntad de no ser ejecutado. En lugar de un mensaje será impreso que indica al usuario que su entrada no es válida. Desde «inputAccepted» no se pudo establecer a true, el bucle va a hacer lo mismo otra vez hasta que la cadena puede ser convertida a número.

    Usted puede probar el programa aquí.

    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            boolean inputAccepted = false;
            while (!inputAccepted) {
                try {
                    System.out.print("Please enter a number: ");
                    Integer.valueOf(input.nextLine());
                    inputAccepted = true;
                } catch (NumberFormatException e) {
                    System.out.println("Not a valid number.");
                }
            }
            System.out.println("Thank you!");
        }
    }
  7. -1

    public class Ejemplo {

    /**
     * author CLRZ
     */
    public static void main(String[] args) {
        int a; //variable
        Scanner in = new Scanner(System.in); //scans your input
        System.out.println("Enter your number's choice:"); 
        int sem1 = in.nextInt(); //reads next integer
        if (sem1 == 1) //conditioned if your choice number is equal to 1
        System.out.println("Hello World1"); //output wil be Hello World
        int b;
    
        System.out.println("Enter your number's choice:");
        int sem2 = in.nextInt(); 
        if (sem2 == 2)
        System.out.println("Hello World2");
        int c;
    
        System.out.println("Enter your number's choice:");
        int sem3 = in.nextInt(); 
        if (sem3 == 3)
        System.out.println("Hello World3");
    }

    }

    • El OP pidió que no es de código explicaciones. Además de este código no es la manipulación de cualquier excepción.

Dejar respuesta

Please enter your comment!
Please enter your name here