简体   繁体   中英

'else if' statement always returns true

Whenever I run this program line 69's else if (room == 6) statement, it always returns true , regardless of the value of room.

import java.util.Scanner;

public class AdventureTwo {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String choice = "";
        int room = 1;

        while (room != 0) {
            if (room == 1) {
                System.out.println("You find yourself in a room. There's a \"blue\" door and a \"red\" door.\nWhich do you choose?");
                choice = keyboard.next();

                if (choice.equalsIgnoreCase("red")) {
                    room = 2;
                } else if (choice.equalsIgnoreCase("blue")) {
                    room = 3;
                }
            } else if (room == 2) {
                System.out.println("Going through the red door reveals the \"family\" room.\nYou can also go \"back\". What is your choice?");
                choice = keyboard.next();
                if (choice.equalsIgnoreCase("family")) {
                    room = 4;
                } else if (choice.equalsIgnoreCase("back")) {
                    room = 1;
                }
            } else if (room == 3) {
                System.out.println("You find two new rooms, the \"kitchen\" and the \"bathroom\".\nYou can also go \"back\", What is your choice?");
                choice = keyboard.next();
                if (choice.equalsIgnoreCase("kitchen")) {
                    room = 5;
                } else if (choice.equalsIgnoreCase("bathroom")) {
                    room = 6;
                } else if (choice.equalsIgnoreCase("back")) {
                    room = 1;
                }
            } else if (room == 4) {
                System.out.println("In the family room you see a tv \"remote\" do you pick it up and turn on the tv, or go \"back\"?");
                choice = keyboard.next();
                if (choice.equalsIgnoreCase("remote")) {
                    System.out.println("You pick up the remote and turn on the tv. You are immediately engrossed in the rv program.");
                    System.out.println("In fact you are so interested you stay there watching tv until you die of dehydration");
                    room = 0;
                } else if (choice.equalsIgnoreCase("back")) {
                    room = 2;
                }
            } else if (room == 5) {
                System.out.println("In the kitchen you find some \"crackers\", you are pretty hungry and they don't look that old.\nYou can also go \"back\".");
                if (choice.equalsIgnoreCase("crackers")) {
                    System.out.println("After eating one cracker, you feel the need to have another one, and another , and another, this goes on until you\nhave eaten so much your stomach bursts and you die.");
                    room = 0;
                } else if (choice.equalsIgnoreCase("back")) {
                    room = 3;
                }
            } else if (room == 6) { // line 69
                System.out.println("In the bathroom there is an open \"window\", you can also go \"back\". What is your choice?");
                choice = keyboard.next();
                if (choice.equalsIgnoreCase("window")) {
                    System.out.println("You climb out the window and drop to the ground. You are free!");
                    room = 0;
                } else if (choice.equalsIgnoreCase("back")) {
                    room = 3;
                }
            }
        }
        System.out.print("Game Over.");
    }
}

I see you are changing the value of room in some of the else-if's. Could that be messing with subsequent else-if blocks? Try using the switch...case statement.

example:

while (room != 0) {
    switch(room) {

        case 1: {
            System.out.println("You find yourself in a room. There's a \"blue\" door and a \"red\" door.\nWhich do you choose?");
            choice = keyboard.next();

            if (choice.equalsIgnoreCase("red")) {
                room = 2;
            } else if (choice.equalsIgnoreCase("blue")) {
                room = 3;
            }
            break;
        }

        case 2: {
            //room==2 code
            break;
        }

        case 3: {
            //etc...
            break; //don't forget to put the "break" before each case's close bracket
        }
    }
}

hth :-)

You could make separate methods to handle what happens in each room, then have an array or ArrayList of those methods (eg., called "roomMethod"). Each of those methods returns the next room chosen by the user. then the main code is:

  while (room != 0 ) {
    room = roomMethod[room]();
  } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM