简体   繁体   中英

Two checks in while loop with Scanner - java

im trying to do two checks with a while loop:

1) To show "error" if the user inputs something other than an int

2) Once the user entered an int , if it is one digit, show "two digits only" and keep the loop on until a two digit int has been entered (so an IF should be used as well)

Currently I only have the first part done:

    Scanner scan = new Scanner(System.in);

    System.out.println("Enter a number");

    while (!scan.hasNextInt()) {

        System.out.println("error");
        scan.next();

    }

However, if possible, I would like to have both checks in one while loop.

And that's where I'm stuck...

Since you already have two answers. This seems a cleaner way to do it.

Scanner scan = new Scanner(System.in);

String number = null;
do {
    //this if statement will only run after the first run.
    //no real need for this if statement though.
    if (number != null) {
        System.out.println("Must be 2 digits");
    }

    System.out.print("Enter a 2 digit number: ");
    number = scan.nextLine();

    //to allow for "00", "01". 
} while (!number.matches("[0-9]{2}")); 
System.out.println("You entered " + number);

First take the input as a String. If it is convertible to Int then you do your checks, else say 2 digit numbers are acceptable. If it is not convertible to a number throw an error. All this can be done in one while loop. And you would like to have a "Do you want to continue? " kind of a prompt and check if the answer is "yes" / "No." Break from the while loop accordingly.

As said above you should always take the input in as string and then try and parse it for an int

package stackManca;

import java.util.Scanner;

public class KarmaKing {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = null;
        int inputNumber = 0;
        while (scan.hasNextLine()) {
            input = scan.next();
            try {
                inputNumber = Integer.parseInt(input);
            } catch (Exception e) {
                System.out.println("Please enter a number");
                continue;
            }
            if (input.length() != 2) {
                System.out.println("Please Enter a 2 digit number");
            } else {
                System.out.println("You entered: " + input);
            }
        }
    }
}

To have it as one loop, it's a bit messier than two loops

int i = 0;
while(true)
{
    if(!scan.hasNextInt())
    {
        System.out.println("error");
        scan.next();
        continue;
    }
    i = scan.nextInt();
    if(i < 10 || >= 100)
    {
        System.out.println("two digits only");
        continue;
    }
    break;
}
//do stuff with your two digit number, i

vs with two loops

int i = 0;
boolean firstRun = true;
while(i < 10 || i >= 100)
{
    if(firstRun)
        firstRun = false;
    else
        System.out.println("two digits only");

    while(!scan.hasNextInt())
    {
        System.out.println("error");
        scan.next();
    }

    i = scan.nextInt();
}
//do stuff with your two digit number, i

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM