javasystem.exit

Two console inputs required to System.exit(0) during else if


So I'm working on a copy of a simple Dice game that was an example from the Maxwell Sanchez YouTube JAVA on Eclipse tutorials. What I started playing around with is simple ways to implement a text based menu of sorts.

What I'm trying to accomplish is a Y or N input method of either restarting the program, or killing it. I'm a total noob, coming here after a tiny bit of Arduino. I'm liking JAVA but there are many things I don't understand.

My problem right now is, everything appears to work so far, except that if you get to the end and type N to quit, It requires 2 inputs of N to actually execute the else if statement. Is that something that is a bug? Or am I just mis-programing what I'm trying to accomplish.

import java.util.*;
public class diceGame 
{
static int money;
static Scanner in = new Scanner(System.in);
static Random random = new Random();
static String userName;
static String tryAgain;

public static void main(String[] args) 
{
    money = 1000;
    System.out.println("Welcome to this simple dice game! " +
            "Please enter your name.");
    String userName = in.nextLine();
    System.out.println("Hey " + userName + ".");
    rollDice();
}
public static void rollDice()
{
    System.out.println("You have " + money + " coins!");
    System.out.println("Please select a number (1-6) to bet on!");
    int betRoll = in.nextInt();
    System.out.println("Please place your bet!");
    int betMoney = in.nextInt();
    while (betMoney > money)
    {
        System.out.println("You don't have enough coins... you only " +
                    "have " + money + "coins.");
        System.out.println("Please place a realistic bet!");
        betMoney = in.nextInt();
    }

    int dice;
    dice = random.nextInt(6)+1;

    if (betRoll == dice)
    {
        System.out.println("You Win!");
        money+=betMoney*6;
        System.out.println("You have " + money + " coins.");
    }

    else
    {
        System.out.println("Snap! You lost your coins!");
        money-=betMoney;
        System.out.println("You have " + money + " coins.");
    }

    if (money <= 0)
    {
        System.out.println("You've lost all yer coins!");
        System.out.println("Play again?" + " Type y or n");

        if (in.next().equalsIgnoreCase("y")) 
        {
            System.out.println("Maybe you'll win this time!");
            money = 1000;
            rollDice();
        } 

        else if (in.next().equalsIgnoreCase("n")) 
        {
            System.out.println("Maybe next time...");
            System.exit(0);
        } 

        else
        { 
            System.out.println("Invalid character");
        }
    }

    else
        {
                rollDice();
        }
}
}

Solution

  • Store the input in a variable, and compare it... or you'll have to input twice.

    String choice = in.next();
    if (choice.equalsIgnoreCase("y")) 
    {
        System.out.println("Maybe you'll win this time!");
        money = 1000;
        rollDice();
    } 
    else if (choice.equalsIgnoreCase("n")) // <-- not in.next()
    

    Every time you call in.next() you read user input.