繁体   English   中英

2D阵列游戏板…NullPointerException

[英]2D array Game Board…NullPointerException

我需要做一个棋盘游戏,我从数组[3] [0]“ Ursa Major”的左下角开始。 当我向西移动时,会收到NullPointerException。 我还需要一些帮助,以对角线移动到[2] [1]“东北”,但不确定如何编写代码。 任何帮助,将不胜感激。

    //Declare Variables
    Map map;
    String input;
    Scanner scan;
    int row, col;

    //Initialize Varibales
    map = new Map();
    scan = new Scanner(System.in);
    row = 3; col = 0;

    //Begin user dialog
    System.out.println("Welcome to the Great Cal Poly Underground");
    input ="";
    while(!input.equals("quit"))
    {
       System.out.println(map.rooms[row][col].name);
       System.out.print(">");
       input = scan.nextLine().toLowerCase();

       if (input.equals("w"))
       {   if(map.rooms[row][col].isValidExit("w"))
           col--;
           else
           System.out.println("You cant go that way");
       }
       else
       if (input.equals("e"))
       {   if(map.rooms[row][col].isValidExit("e"))
           col++;
           else
           System.out.println("You cant go that way");
       }

这是我的用户界面,这是我的地图

 Room[][] rooms = new Room[4][4];

Map()
{
   Room lectureHall = new Room();
   Room cafeteria = new Room();

   lectureHall.name  = "Ursa Major";
   lectureHall.exits = new String []{"e"};//can add north south west

   cafeteria.name  = "Los Olivos";
   cafeteria.exits = new String []{"w"}; // can add north south east

   rooms[3][0] = lectureHall;
   rooms[2][1] = cafeteria;

这是我的房间

boolean isValidExit(String anExit)
{
    boolean result = false;
    int index = 0;
    while (result == false && index < exits.length)
    {
        if(exits[index].equals(anExit))
            result = true;
        index++;
    }     
    return result;

rooms有16个引用,但仅设置了两个( rooms[3][0] = lectureHall; rooms[2][1] = cafeteria; )。 您需要为其余索引创建对象。

在Java中初始化数组,如下所示:

Room[][] rooms = new Room[4][4];

仅初始化rooms数组,这意味着只有array不会为null。

但是,“内部”的任何对象都不会初始化。

如果您希望热切地创建您的房间然后设置其属性,请执行以下操作:

Room[][] rooms = new Room[4][4];

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        rooms[i][j] = new Room(...);
    }
}

考虑所有的答案以上, 而且 ,你的出发细胞是房[3] [0],如果你想要去的“西进”,你是递减山坳变量:

if (input.equals("w"))
{   if(map.rooms[row][col].isValidExit("w"))
    //you are decrementing col, which will become -1 after decrementing
    col--;
    else
       System.out.println("You cant go that way");
}

然后,该程序返回到循环的开头,即显示当前房间的名称:

while(!input.equals("quit"))
{
   System.out.println(map.rooms[row][col].name);
   System.out.print(">");

并且由于col = -1,您正在尝试执行map.rooms [3] [-1] ,这肯定会导致异常。

确保您未引用小于0的数组索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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