2012-11-29 85 views
2

我正在尝试制作一个战舰游戏,为此我需要一个二维数组的正方形,这是一个人可以选择的地方。但是,当我运行我的程序时,当我尝试调用resetBoard()函数时,会出现空指针异常。无法初始化Java中的对象的二维数组

战舰类:

public class Battleship 
{ 
    private Square[][] squares; 
    private boolean aircraftCarrierSunk; 
    private boolean battleshipSunk; 
    private boolean submarineSunk; 
    private boolean patrolBoatSunk; 
    private int boardSize; 
    public int turns; 

    public Battleship(int x) 
    { 
     squares = new Square[x][x]; 
//   for(int i = 0; i < boardSize; i++) //not sure if I need this 
//   { 
//    for(int j = 0; j < boardSize; j++) 
//    { 
//     squares[i][j] = new Square(); 
//    } 
//   } 
     boardSize = x; 
     aircraftCarrierSunk = false; 
     battleshipSunk = false; 
     submarineSunk = false; 
     patrolBoatSunk = false; 
    } 

    public void resetBoard() 
    { 
     for(int i = 0; i < boardSize; i++) 
     { 
      for(int j = 0; j < boardSize; j++) 
      { 
       squares[i][j].setContents(0); 
      } 
     } 
    } 

司机:

public static void main (String [] args) 
{ 
    Battleship game = new Battleship(5);  // play on a 5 by 5 board 

    System.out.println("Battleship!"); 
    System.out.println("-----------\n"); 

    for (int gameNumber = 1; gameNumber <= 2; gameNumber++) 
    { 
     game.resetBoard(); 
+0

你有没有试过取消注释那些你不确定的行吗?你需要他们。 – Jeff

+0

@Jeff是的,我仍然在“square [i] [j] .setContents(0);” line – ahota

+0

@AJ你可以发布'Square'类的代码吗?它可能是由'setContents'方法本身产生的NPE。编辑:没关系,user1858654说得对。 – Jeff

回答

6

GOT IT-取消注释Battleship线,然后移动boardSize = x;高于for循环。

+0

Gaah,它总是很简单的事情。谢谢。 – ahota