checking if input from scanner is int with while loop java

前端 未结 3 1346
既然无缘
既然无缘 2021-01-17 08:01

I basically want the following while loop to check if the input is an integer. It cannot contain decimals because it is pointing to an array. If the value entered is a decim

相关标签:
3条回答
  • 2021-01-17 08:39

    you can check like this

    System.out.print("Enter month (valid values are from 1 to 12): ");
    Scanner monthScan = new Scanner(System.in);
    
    while(monthScan.hasNext())
    {
       if(!monthScan.hasNextInt() && (monthInput<1 ||  monthInput>12))
       {
           System.out.print("Invalid value! Enter month (valid values are from 1 to 12):"); 
           continue;
       }
    
       // If the month input is below 1 or greater than 12, prompt for another value
      int monthInput = monthScan.nextInt();
      //do your logic here   
      break;//use the break after logic 
    
    }
    

    update
    Use break after your logic so that It will exit after valid input.

    0 讨论(0)
  • 2021-01-17 08:40

    A small modification to your program solves the problem

     System.out.print("Enter month (valid values are from 1 to 12): ");
            Scanner monthScan = new Scanner(System.in);
           int monthInput = monthScan.nextInt();
            // If the month input is below 1 or greater than 12, prompt for another value
            while((monthInput<1 || monthInput>12) )
            {
                System.out.print("Invalid value! Enter month (valid values are from 1 to 12): ");
    
                monthInput = monthScan.nextInt();
            }
            System.out.println("I am here");
    

    Output:

    Enter month (valid values are from 1 to 12): -5
    Invalid value! Enter month (valid values are from 1 to 12): -5
    Invalid value! Enter month (valid values are from 1 to 12): -2
    Invalid value! Enter month (valid values are from 1 to 12): 5
    I am here
    

    Hope this helps you.

    0 讨论(0)
  • 2021-01-17 08:41

    Check that the input is integer with hasNextInt() before you call nextInt(). Otherwise nextInt() throws an InputMismatchException when user types a non integer.

    int monthInput;
    
    System.out.print("Enter month (valid values are from 1 to 12): ");
    Scanner monthScan = new Scanner(System.in);
    
    if (monthScan.hasNextInt()) {
        monthInput = monthScan.nextInt();
    } else {
        monthScan.next();   // get the inputted non integer from scanner
        monthInput = 0;
    }
    
    // If the month input is below 1 or greater than 12, prompt for another value
    while (monthInput < 1 || monthInput > 12) {
        System.out.print("Invalid value! Enter month (valid values are from 1 to 12): ");
        if (monthScan.hasNextInt()) {
            monthInput = monthScan.nextInt();
         } else {
           String dummy = monthScan.next();
           monthInput = 0;
        }
    }
    
    0 讨论(0)
提交回复
热议问题