web-dev-qa-db-fra.com

Comment vérifier si la saisie de l'utilisateur n'est pas une valeur int

Je dois vérifier si une valeur entrée par l'utilisateur n'est pas une valeur int. J'ai essayé différentes combinaisons de ce que je sais mais je ne reçois rien ou des erreurs aléatoires

Par exemple:

Si l'utilisateur entre "adfadf 1324", un message d'avertissement s’affiche.


Ce que j'ai:

       // 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);

      }
  }
9
jjkk0990

Exécuter simplement une exception si l'entrée est invalide

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");
}
17
Pandiyan Cool
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;
  }
6
Rajendra_Prasad

vous avez des erreurs suivantes qui, à leur tour, vous causent cette exception, laissez-moi vous l'expliquer

c'est votre code existant:

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

dans le code ci-dessus, if(!scan.hasNextInt()) deviendra true uniquement lorsque la saisie de l'utilisateur contient les deux caractères ainsi que des entiers tels que votre saisie adfd 123.

mais vous essayez de lire uniquement les entiers à l'intérieur de la condition if en utilisant usrInput= sc.nextInt();. Ce qui est incorrect, c'est ce que jette Exception in thread "main" Java.util.InputMismatchException.

si bon code devrait être 

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

dans le code ci-dessus, sc.next() aidera à lire la nouvelle entrée de l'utilisateur et continue aidera à exécuter de nouveau la même chose si (i.e if(!scan.hasNextInt())). 

S'il vous plaît utilisez le code dans ma première réponse pour construire votre logique complète. Indiquez-moi si vous avez besoin d'explications à ce sujet.

2
Rajendra_Prasad

essayez ce code [updated] :

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;
            } 
        }
2
Rajendra_Prasad

Cela consiste à continuer à demander des entrées pendant que cette entrée est un entier et à trouver si elle est impaire ou même sinon elle se terminera.

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");
    }
0
Salah Assaf

Peut-être que vous pouvez essayer ceci:

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;
}
0
shady

Tiré d'un post lié :

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;
}
0
ElliotSchmelliot