0

First of all, apologies for the title gore.

The specific thing I am trying to understand here in the following piece of code is why the getNumber function, when called the second time, continues to return the same initial user input and doesn't ask for a new user input.

/*Write an application that inputs one number consisting
of five digits from the user, separates the number into its individual digits and prints the digits
separated from one another by three spaces each. 
 */

public class SeparatingDigitsOfInt {
    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
    boolean check =false;
        String s=null;
        while (check==false)
        {
        s= Integer.toString(getNumber()); //since user input was a string, getNumber returns 0 and we enter the while loop below

        while (s.equals("0"))// here i am trying to get another input from user because first input was invalid
        {
            System.out.println("Try that again!");
            s= Integer.toString(getNumber());  // why getNumber continues to return xyz here and doesn't ask for new user input
            check =false;

        }
        check =true;
        }

        System.out.println(s);

        while(s.length()!= 5){
            System.out.println("Input number is not of 5 digits!");
            System.out.println("Please enter a 5 digit number");    
            s = input.next();
        }
        String result = "";
        for (int i = 0; i < s.length(); i++) {
            result= result + s.charAt(i) + "   ";
        }


        System.out.println("Result is :" + result);
    }


    public static int getNumber(){

        try {
            System.out.println("Enter a 5 digit number");
            return  input.nextInt(); // user inputs string xyz

        } 

        catch (InputMismatchException e) {
            System.out.println("Please enter only numbers");
            return 0;// since user inputs xyz, so 0 is returned by getNumber
        }


    }
}
Crabster
  • 135
  • 10

1 Answers1

0

In documentation stated :

If the translation is successful, the scanner advances past the input that matched

So that means if it translation was not successful, it won't advance

Dmytro Grynets
  • 763
  • 9
  • 26