Necesito comprobar si un usuario de entrada de valor no es un valor int. He probado diferentes combinaciones de lo que yo sé, pero yo no reciben nada o errores aleatorios

Por ejemplo:

Si el usuario introduce «adfadf 1324» va a elevar un mensaje de advertencia.


Lo que tengo:

       //Initialize a Scanner to read input from the command line
       Scanner sc = new Scanner(System.in);
       int integer, smallest = 0, input;
       boolean error = false;

       System.out.print("Enter an integer between 1-100: ");
       range = sc.nextInt();

       if(!sc.hasNextInt()) {

          error = true;
          System.out.println("Invalid input!");
          System.out.print("How many integers shall we compare? (Enter an integer between 1-100: ");
          sc.next();
    }

       while(error) {
          for(int ii = 1; ii <= integer; ii++) {

              ...

          } //end for loop
      }
      System.out.println("The smallest number entered was: " + smallest);

      }
  }
Lo está haciendo a través de la excepción, la única manera? Porque tengo que comprobar si es mayor que 1 y si es un valor int. O puede que se hacen con las excepciones así?
has comprobado mi código?
Ver mi versión actualizada del código que va a trabajar para asegurarse de
intenta mi código actualizado????

OriginalEl autor jjkk0990 | 2013-08-08

7 Comentarios

  1. 17

    Simplemente tirar Excepción si la entrada no es válida

    Scanner sc=new Scanner(System.in);
    try
    {
      System.out.println("Please input an integer");
      //nextInt will throw InputMismatchException
      //if the next token does not match the Integer
      //regular expression, or is out of range
      int usrInput=sc.nextInt();
    }
    catch(InputMismatchException exception)
    {
      //Print "This is not an integer"
      //when user put other than integer
      System.out.println("This is not an integer");
    }
    gracias terminé usando algo como esto
    Oh, eres un genio.. .. Gracias hombre..
    mi placer

    OriginalEl autor Pandiyan Cool

  2. 6
    Try this one:
    
        for (;;) {
            if (!sc.hasNextInt()) {
                System.out.println(" enter only integers!: ");
                sc.next(); //discard
                continue;
            }
            choose = sc.nextInt();
            if (choose >= 0) {
                System.out.print("no problem with input");
    
            } else {
                System.out.print("invalid inputs");
    
            }
        break;
      }
    He intentado !sc.hasNextInt() pero dando errores. Voy a editar el primer post
    En su primera condición if usted está tratando de leer entero el valor de esta es lo que está causando ese error,porque ¿cómo se puede leer entero cuando haya introducido que si la instrucción que se satisface sólo si su entrada no es entero, por favor revise su código actualizado(primero si el estado parte)

    OriginalEl autor Rajendra_Prasad

  3. 2

    que tiene los siguientes errores, que a su vez es la causa de que la excepción, permítanme explicarlo

    este es el código existente:

    if(!scan.hasNextInt()) {
            System.out.println("Invalid input!");
            System.out.print("Enter an integer: ");
            usrInput= sc.nextInt();
        }

    en el código anterior if(!scan.hasNextInt()) se convertirá en true sólo cuando la entrada de usuario contiene caracteres así como los números enteros como su entrada adfd 123.

    pero usted está tratando de leer sólo enteros dentro de la condición if utilizando usrInput= sc.nextInt();. Lo cual es incorrecto,que es lo que está tirando Exception in thread "main" java.util.InputMismatchException.

    de manera correcta el código debe ser

     if(!scan.hasNextInt()) {
                System.out.println("Invalid input!");
                System.out.print("Enter an integer: ");
                sc.next(); 
                continue;
            }

    en el código anterior sc.next() ayudará a leer la nueva entrada del usuario y continue ayudará en la ejecución de la misma si la condición(i.e if(!scan.hasNextInt())) de nuevo.

    Por favor, utilice el código en mi primera respuesta para construir su lógica completa.déjeme saber si usted necesita alguna explicación.

    Hola, gracias por responder. No funciona, a menos que haya algo que no estoy viendo. Voy a actualizar mi post de nuevo.

    OriginalEl autor Rajendra_Prasad

  4. 2

    prueba este código [actualizado]:

    Scanner scan = null;
           int range, smallest = 0, input;
    
         for(;;){
             boolean error=false;
            scan = new Scanner(System.in);
            System.out.print("Enter an integer between 1-100:  ");
    
    
                if(!scan.hasNextInt()) {
                    System.out.println("Invalid input!");                      
                    continue;
                }
             range = scan.nextInt();
                if(range < 1) {
                    System.out.println("Invalid input!");
                    error=true;
                }
            if(error)
            {
            //do nothing
            }
            else
            {
           break;
            }
    
            }
                 for(int ii = 1; ii <= range; ii++) {
                scan = new Scanner(System.in);
                System.out.print("Enter value " + ii + ": ");
    
                if(!scan.hasNextInt()) {
                    System.out.println("Invalid input!"); 
                   ii--;
                    continue;
                } 
            }
    hay una razón por la que usted lo puso en un for(;;) bucle?
    sí,es un bucle infinito,es necesario mantener en bucle una y otra vez hasta que el usuario entra en la entrada correcta.una vez que el usuario ingresa a la entrada correcta en el bucle va a romper
    He intentado eso pero no detener el bucle y no me preguntes a la entrada de otro entero. Puedo hacer un bucle while? E. g while(!error)…
    sí, yo sabía que sólo estaba comprobando si usted está poniendo cualquier esfuerzo para solucionar su problema.De todos modos probar mi código actualizado.
    ese bucle infinito no funciona para mí. He actualizado mi código con un bucle while, pero también no está trabajando y dando el mismo error. Puedes echar un vistazo?

    OriginalEl autor Rajendra_Prasad

  5. 0

    Tomado de un post relacionados:

    public static boolean isInteger(String s) {
        try { 
            Integer.parseInt(s); 
        } catch(NumberFormatException e) { 
            return false; 
        }
        //only got here if we didn't return false
        return true;
    }

    OriginalEl autor ElliotSchmelliot

  6. 0

    Tal vez usted puede probar esto:

    int function(){
    Scanner input = new Scanner(System.in);   
    System.out.print("Enter an integer between 1-100: ");   
    int range;
    while(true){   
        if(input.hasNextInt()){   
        range = input.nextInt();
        if(0<=range && range <= 100)
            break;
        else
            continue;
        }
        input.nextLine();  //Comsume the garbage value
        System.out.println("Enter an integer between 1-100:");
    }
    return range;
    }

    OriginalEl autor shady

  7. 0

    Esto es para mantener a solicitar entradas, mientras que esta entrada es un número entero y determinar si es par o impar la cosa va a terminar.

    int counter = 1;
        System.out.println("Enter a number:");
        Scanner OddInput = new Scanner(System.in);
            while(OddInput.hasNextInt()){
                int Num = OddInput.nextInt();
                if (Num %2==0){
                    System.out.println("Number " + Num + " is Even");
                    System.out.println("Enter a number:");
                }
                else {
                    System.out.println("Number " + Num + " is Odd");
                    System.out.println("Enter a number:");
                    }
                }
            System.out.println("Program Ended");
        }

    OriginalEl autor Salah Assaf

Dejar respuesta

Please enter your comment!
Please enter your name here