title: How can I handle this IndexOutOfBounds exception?
body: <p>I am working on a text-based adventure game and need some help handling the IndexOutOfBounds exception on the getUserRoomChoice() function. I have an index of 3 on the menu so when the user enters a number > 3, it throws that exception. I tried using a try-catch on the line where it prompts the user to "Select a Number" but it is not catching it.</p>
  
  <p>Here is my main class:</p>
  
  <pre><code>import java.util.Scanner;
  
  public class Game {
      private static Room library, throne, study, kitchen;
      private static Room currentLocation;
  
      public static void main(String[] args) {
          Scanner input = new Scanner(System.in);
         initialSetupGame();
         String reply;
         do {
             printNextRooms();
             int nextRoomIndex = getUserRoomChoice();
             Room nextRoom = getNextRoom(nextRoomIndex);
             updateRoom(nextRoom);
             System.out.print("Would you like to continue? Yes/No: ");
             reply = input.nextLine().toLowerCase();
      } while ('y' == reply.charAt(0));
         goodbye();
      }
  
      public static void initialSetupGame() {
          // Instantiate room objects of type Room
          library = new Room("Library");
          throne = new Room("Throne");
          study = new Room("Study");
          kitchen = new Room("Kitchen");
  
          // Connect the objects to each other
          library.addConnectedRoom(throne);
          library.addConnectedRoom(study);
          library.addConnectedRoom(kitchen);
  
          throne.addConnectedRoom(library);
          throne.addConnectedRoom(study);
          throne.addConnectedRoom(kitchen);
  
          study.addConnectedRoom(library);
          study.addConnectedRoom(throne);
          study.addConnectedRoom(kitchen);
  
          kitchen.addConnectedRoom(library);
          kitchen.addConnectedRoom(study);
          kitchen.addConnectedRoom(throne);
  
          // Welcome message
          System.out.println("Welcome to Aether Paradise, "
                  + "a game where you can explore"
                  + " the the majestic hidden rooms of Aether.");
  
          // Prompt user for a name
          Scanner input = new Scanner(System.in);
          System.out.print("\nBefore we begin, what is your name? ");
          String playerName = input.nextLine();
          System.out.print("\n" + playerName +"? Ah yes. The Grand Warden told us"
                  + " to expect you. Nice to meet you, " + playerName + "."
                  + "\nMy name is King, a member of the Guardian Aethelorian 12"
                  + " who protect the sacred rooms of Aether."
                  + "\nAs you hold the Warden's signet ring, you have permission"
                  + " to enter.\n\nAre you ready to enter? ");
  
          String response = input.nextLine().toLowerCase();
          if ('n' == response.charAt(0)) {
              System.out.println("Very well then. Goodbye.");
              System.exit(0);
          }
          if ('y' == response.charAt(0)) {
              System.out.println("\nA shimmering blue portal appeared! You leap "
                      + "inside it and your consciousness slowly fades...");
          }
          else {
              System.out.println("Invalid input. Please try again.");
              System.exit(1);
          }
  
  
          // Set the player to start in the library
          currentLocation = library;
          System.out.print("\nYou have spawned at the library.");
  
          System.out.println(currentLocation.getDescription());
  
      }
      public static void printNextRooms() {
          // Lists room objects as menu items
          System.out.println("Where would you like to go next?");
          currentLocation.printListOfNamesOfConnectedRooms();
      }
      // How to handle the exception when input &gt; index?
      public static int getUserRoomChoice() {
          Scanner input = new Scanner(System.in);
          System.out.print("(Select a number): ");
          int choice = input.nextInt();
          return choice - 1;
      }
      public static Room getNextRoom(int index) {
          return currentLocation.getConnectedRoom(index);
      }
      public static void updateRoom(Room newRoom) {
          currentLocation = newRoom;
          System.out.println(currentLocation.getDescription());
      }
  
      public static void goodbye() {
          System.out.println("You walk back to the spawn point and jump into"
                  + "the portal... \n\nThank you for exploring the hidden rooms "
                  + "of Aether Paradise. Until next time.");
      }
  }
  </code></pre>
  
  <p><strong>Room Class</strong></p>
  
  <pre><code>import java.util.ArrayList;
  
  public class Room {
      // Instance variables
      private String name;
      private String description;
      private ArrayList&lt;Room&gt; connectedRooms;
  
      // Overloaded Constructor
      public Room(String roomName) {
          this.name = roomName;
          this.description = "";
          connectedRooms = new ArrayList&lt;&gt;();
      }
  
      // Overloaded Constructor
      public Room(String roomName, String roomDescription) {
          this.name = roomName;
          this.description = roomDescription;
          connectedRooms = new ArrayList&lt;&gt;();
      }
  
      // Get room name
      public String getName() {
          return name;
      }
  
      // Get room description
      public String getDescription() {
          return description;
      }
  
      // Add connected room to the array list
      public void addConnectedRoom(Room connectedRoom) {
          connectedRooms.add(connectedRoom);
      }
  
      // Get the connected room from the linked array
      public Room getConnectedRoom(int index) {
          if (index &gt; connectedRooms.size()) {
              try { 
                  return connectedRooms.get(index);
              } catch (Exception ex) {
                  System.out.println(ex.toString());
              }
          }
          return connectedRooms.get(index);
      }
      // Get the number of rooms
      public int getNumberOfConnectedRooms() {
          return connectedRooms.size();
      }
      // Print the connected rooms to the console
      public void printListOfNamesOfConnectedRooms() {
          for(int index = 0; index &lt; connectedRooms.size(); index++) {
              Room r = connectedRooms.get(index);
              String n = r.getName();
              System.out.println((index + 1) + ". " + n);
          }
      }
  }
  </code></pre>