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