NullPointerException being thrown whenever array m

2019-08-10 23:52发布

I am having an issue with an exception that keeps being thrown every time I attempt to execute the following code.

Below is the driver, and below that I will give you the constructor for Room and the playerEnters method.

import java.util.Random;
import java.util.Scanner;

public class ZorkPlayer
{

    public static void main (String [ ] args)
    {
        // create a start screen followed by introduction
        int choice = 0;
        while(choice != 3)
        {
            choice = menu();
            switch (choice)
            {
                case 1:
                    //begin new game
                    newGame();
                    break;
                case 2:
                    //change difficulty level
                    break;
                case 3:
                    //exit the program
                    break;
                default: 
                    //invalid choice
                    break;
            }
        }
    }

    /**
     * Creates a menu and gets a choice from the user <br>        
     */
    public static int menu ()
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("Welcome to Zork!");
        System.out.println("What would you like to do?");
        System.out.println("\t1- Start a new game");
        System.out.println("\t2- Choose difficulty level (not yet available)");
        System.out.println("\t3- Exit the program");
        int choice = kb.nextInt();
        return choice;
    }

    public static void newGame()
    {
        final int DEFAULT_ROOMS = 5;
        Random rng = new Random ();
        int numRooms = rng.nextInt(5) + DEFAULT_ROOMS;
        int playerPos = 0;
        Room dungeon[] = new Room[numRooms];

        dungeon[playerPos].playerEnters();
        for (int i = 0; i < dungeon.length; i++)
        {
            System.out.print (dungeon[i].getMap ( ));
        }
    }
}

Constructor for Room

private int monster = 0; //initializes with no monster spawned
private int player = 0; //initializes with no player present
private int weapon = 0; //initializes with no weapon present

public Room()
{
    //creates a new room and determines whether the new room has a monster or not
    Random rng = new Random();
    int monsterSpawn = rng.nextInt (2); //determines whether or not a monster will spawn in the room
    if (monsterSpawn == 0)
    {
        new Monster(); //if a monster is spawned, creates a new monster and sets the value of monster to present
        setMonster(1);  
    }
    else
        setMonster(0); //otherwise leaves the value of monster to default
    setPlayer(0); //sets the presence of player to false
    setWeapon(0); //sets the presence of weapon to false
}

playerEnters method

public void playerEnters()
{
    setPlayer(1);
}

The NullPointerException is thrown whenever the playerEnters method is called in the driver, and then again when the getMap method is called.

2条回答
欢心
2楼-- · 2019-08-11 00:28

You need to instantiate the Room.

 Room dungeon[] = new Room[numRooms];
 dungeon[0]=new Room();
 ...
查看更多
劫难
3楼-- · 2019-08-11 00:40

Ignoring everything else, this is the problem:

Room dungeon[] = new Room[numRooms];
dungeon[playerPos].playerEnters();

You create a Room array, but don't create any Room objects in that array. Therefore dungeon[playerPos] is null.

You need to populate that array with Room objects.

for (int i = 0; i < numRooms; i++)
{
    dungeon[i] = new Room();
}
查看更多
登录 后发表回答