I’m writing a small program that is asking that user to guess a number between 1 and 100. My idea was to make several methods one with game playGame(), one that shows menu showMenu(), one for statistic. I placed the menu inside a while loop in the main method hoping that every time a game is played it will the menu and ask the user for input. Most of it works fine buy I can’t get the program flow right.
Every time I finish a game, a new game starts. I think that the problem is in the while loop inside the many method. It works fine if I change:
 public static void showMenu() {
    Scanner input = new Scanner(System.in);
    System.out.println("1. Play a game.");
    System.out.println("2 Show statistics.");
    System.out.println("3. Exit.\n");
    System.out.println("Make a choise: ");
    int selectMenu = input.nextInt();
    while (true) {
        switch (selectMenu) {
            case 1:
                playGame();
                break;
            case 2:
                statistics();
                break;
            case 3:
                System.exit(0);
                break;
            default:
                System.out.println("Enter valid number:");
        }
    }
} //end showMenu
To:
    public static void showMenu() {
    Scanner input = new Scanner(System.in);
    while (true) {
        System.out.println("1. Play a game.");
        System.out.println("2 Show statistics.");
        System.out.println("3. Exit.\n");
        System.out.println("Make a choise: ");
        int selectMenu = input.nextInt();
        switch (selectMenu) {
            case 1:
                playGame();
                break;
            case 2:
                statistics();
                break;
            case 3:
                System.exit(0);
                break;
            default:
                System.out.println("Enter valid number:");
        }
    }
} //end showMenu
But I can’t understand why. In the firs example after the game is played a new game starts without showing the menu. It jumps directly to case: 1 Thanks a lot!
You can see the program below:
public class GuessTheNumber {
private static int gameCount;
private static int guessCount;
private static int highestNumber;
private static int lowestNumber;
public static void main(String[] args) {
    while (true) {
        showMenu();  
    }
} // end main
public static void playGame() {
    int secretNumber, guess;
    Scanner input = new Scanner(System.in);
    SecureRandom rand = new SecureRandom();
    secretNumber = rand.nextInt(100) + 1; //makes random number between 1 and 100
    System.out.println(secretNumber);
    System.out.println("Guess the secret mumber which is between 1 and 100.");
    System.out.print("Make your guess: ");
    guess = input.nextInt();
    guessCount++;
    highestNumber = guess;
    lowestNumber = guess;
    while (guess != secretNumber) {
        // high or low logic
        if (guess > secretNumber) {
            System.out.println("The number is too high.");
        }
        else {
            if (guess < secretNumber) {
                System.out.println("The number is too low.");
            }
        }
        System.out.print("Make a new guess: ");
        guess = input.nextInt();
        guessCount++;
        //get highest and lowest number
        if (guess > highestNumber) {
            highestNumber = guess;
        }
        if (guess < lowestNumber) {
            lowestNumber = guess;
        }
    } //end while
    System.out.printf("Very good the right number was: %d%n", guess);
} //end playGame()
public static void showMenu() {
    Scanner input = new Scanner(System.in);
    System.out.println("1. Play a game.");
    System.out.println("2 Show statistics.");
    System.out.println("3. Exit.\n");
    System.out.println("Make a choise: ");
    int selectMenu = input.nextInt();
    while (true) {
        switch (selectMenu) {
            case 1:
                playGame();
                break;
            case 2:
                statistics();
                break;
            case 3:
                System.exit(0);
                break;
            default:
                System.out.println("Enter valid number:");
        }
    }
} //end showMenu
public static void statistics() {
    System.out.println("Games played: " + gameCount);
    System.out.println("Total number of guesses: " + guessCount);
    System.out.println("The highest number: " + highestNumber);
    System.out.println("The lowest number: " + lowestNumber);
}
} //end class GuessTheNumber
 
    