11

I want to do a switch in while loop where at the break of every switch statement the while loop stops and ask for an input like F, R, C, Q. The statement below works but the statement does not break. Please help

public static void main(String[] args) throws IOException {

    // start both with 1 point
    int goodTotal = 50;
    int monTotal = 50;

    // input switch statement

    while (goodTotal > 0 && monTotal > 0) {

        System.out.print("Type a letter: ");
        System.out.println("\n");
        System.out.print("F: Go out and Fight ");
        System.out.println("\n");
        System.out.print("R: Rest ");
        System.out.println("\n");
        System.out.print("C: Check Stats ");
        System.out.println("\n");
        System.out.print("Q: Quit ");
        int input = System.in.read();

        System.out.println("You typed: " + (char) input);

        switch (input) {
        case 'f':
            System.out.println("Continue the game");
            break;
        case 'r':
            System.out.println("Players should rest");
            break;
        case 'c':
            System.out.println("Checking the status of the game");
            System.out.print("Goodman has " + goodTotal + " points and Monster has " + monTotal + " points");
            System.out.println("\n");
            break;
        case 'q':
            System.out.println("Game over");
            System.exit(input);
            break;
        default:
            System.out.println("Invalid selection");
            break;
        }

        // Set value of minimum and maximum damage
        int minDmg = 2;
        int maxDmg = 15;

        // Get random number;
        int damage = minDmg + Double.valueOf(Math.random() * (maxDmg - minDmg)).intValue();
        int damage2 = minDmg + Double.valueOf(Math.random() * (maxDmg - minDmg)).intValue();

        // remove value of damage from started value to get total value remaining
        goodTotal = goodTotal - damage;
        monTotal = monTotal - damage2;

        // print message if still in the game
        if (goodTotal > 0) {
            System.out.println("Goodman has " + goodTotal + " points left. Not bad, Man! ");
        }

        // if Goodman survives round 2 print a message of encouragement
        if (goodTotal > 0 && count > 1 && count <= 2) {
            System.out.print("This is encouraging. Goodman has lasted past roundhh " + count + ". ");

            // print new message if Goodman passes round 3
        } else if (goodTotal > 0 && count == 3) {
            System.out.print("Goodman is as strong as Samson. He has lasted round " + count
                    + " and still looks strong.");
            System.out.print(" 10 hit points has been added to your total");
        }

        if (monTotal > 0) {
            System.out.println("Wait, Monster has a total of " + monTotal + " points and is still in the game");
        }

        // exit if have less than 0 point, and print game over. Congratulate the winner
        if (goodTotal < 0) {
            System.out.println("Goodman you are out of the game");
            System.out.println("The monster will take over the village. This is sad");
            System.out.println("Game Over!");
        } else if (monTotal < 0) {
            System.out.println("Goodman has been victorious");
            System.out.println("The monster is dead. The people live!!!!");
            System.out.println("Game Over!");
        }
        System.out.println("This is the end of round " + count + " ");
        System.out.println("\n");
        count = count + 1;

    }

}
1
  • Breaking out of every switch will never execute the code after the switch (till the end of the while). Is that what you want to achieve? Commented Feb 28, 2011 at 11:06

3 Answers 3

19

Use a label on the loop:

loop: while (goodTotal > 0 && monTotal > 0) {
    // ...
    switch (input) {
        case 'f':
            // ...
            break loop;
        case 'r':
            // ...
            break loop;
        // ...
    }
    // ...
}
Sign up to request clarification or add additional context in comments.

Comments

6

You should use labelled breaks.

Although it probably is better to rewrite the code in a way that doesn't need them, as they're not very easy to read.

Comments

1

input is of type int, but the case labels are character literals ( i.e., f,r,c,q). Why don't you just make the input also a char type ?

char input = System.in.read();

2 Comments

@earnest You're welcome. Please vote up and/or accept the response you deem appropriate.
Guys, I have a followup question. Please help I want to add these option, where goodMan and purchase either a bat, axe or sword to fight the monster. How do i set up these variable options into arrays 0. Bat min damage = 2 max damage = 4 cost = 3 1. axe min damage = 4 max damage = 6 cost = 6 2. sword min damage = 6 max damage = 8 cost = 10 3. cancel

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.