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.
You need to instantiate the Room.
Ignoring everything else, this is the problem:
You create a
Room
array, but don't create anyRoom
objects in that array. Thereforedungeon[playerPos]
isnull
.You need to populate that array with
Room
objects.