2010-07-13 58 views
0

行,所以我有这个小程序我提出,我希望它按照一个号码发生器一个世界......爪哇 - 加载不同的地图

这就是:

public int[][] loadBoard(int map) { 
    if (map == 1) { int[][] board = { { 
2,2,24,24,24,24,24,3,3,0,0,0,1 }, 

{ 2,2,24,23,23,23,24,1,3,0,0,0,1 }, 

{ 1,1,24,23,23,23,24,1,3,3,3,3,1 }, 

{ 1,1,24,24,23,24,24,1,1,1,1,3,1 }, 

{ 1,1,1,1,7,1,1,1,1,1,1,3,1 }, 

{ 5,1,1,1,7,7,7,7,7,1,1,1,1 }, 

{ 6,3,3,1,3,3,3,1,7,7,7,3,1 }, 

{ 6,3,3,1,3,1,1,1,1,1,7,1,1 }, 

{ 3,3,1,1,1,1,1,1,1,1,7,1,1 } }; 

}else{ 

int[][] board = { 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 


{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,24,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,24,1,1,1,1 }, 

{ 1,1,7,1,1,24,24,24,24,1,1,1,1 }, 

{ 1,1,7,1,1,24,1,24,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,3,3,1,1,24,1,1,1,1,1,1,1 }, 

}; } return board; } 

,并呼吁它使用:

board = loadBoard(1);

我把它放在init()方法中。那样,我可以在loadBoard()内的数字上调用地图。然而,当我开始我的游戏时,我得到了空指针异常,我知道它与我刚才向您展示的代码有关。这可能是我正在做的一些菜鸟错误..也许你可以帮忙吗?

回答

2

它是。您再次创建“board”变量。即使名称相同,您返回的变量也不是您创建的变量。这里是固定的代码:

public int[][] loadBoard(int map) { 
    if (map == 1) { 
return new int[][] { 

{2,2,24,24,24,24,24,3,3,0,0,0,1 }, 

{ 2,2,24,23,23,23,24,1,3,0,0,0,1 }, 

{ 1,1,24,23,23,23,24,1,3,3,3,3,1 }, 

{ 1,1,24,24,23,24,24,1,1,1,1,3,1 }, 

{ 1,1,1,1,7,1,1,1,1,1,1,3,1 }, 

{ 5,1,1,1,7,7,7,7,7,1,1,1,1 }, 

{ 6,3,3,1,3,3,3,1,7,7,7,3,1 }, 

{ 6,3,3,1,3,1,1,1,1,1,7,1,1 }, 

{ 3,3,1,1,1,1,1,1,1,1,7,1,1 } }; 

}else{ 

return new int[][] { 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 


{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,24,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,24,1,1,1,1 }, 

{ 1,1,7,1,1,24,24,24,24,1,1,1,1 }, 

{ 1,1,7,1,1,24,1,24,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,1,1,1,1,24,1,1,1,1,1,1,1 }, 

{ 1,3,3,1,1,24,1,1,1,1,1,1,1 }, 

}; } 

} 

如果我现在你刨多少个“数字”有:)

另一个建议是不要创建阵列可以更simp'ified在飞行中,但将它们作为常量。然后从方法返回适当的数组。您的代码可能看起来像(更多然后2种选择):

private static final int[][] BOARD1 = <array here>; 
private static final int[][] BOARD2 = <array here>; 
private static final int[][] BOARD3 = <array here>; 
private static final int[][] BOARD4 = <array here>; 


public function int[][] loadBoard(int choice) { 
    switch(choice) { 
     case 1: return BOARD1; 
     case 2: return BOARD2; 
     case 3: return BOARD3; 
     case 4: return BOARD4; 
     default: throw new RuntimeException("Unknown board choice"); 
    } 
} 
+0

假设4 。 然后怎样呢?并且谢谢你:P – nn2 2010-07-13 00:23:10

+0

ps - 我在你的代码中得到了“return board”这一行的无法访问的声明:S – nn2 2010-07-13 00:25:27

+0

@Dan - 把它删除。 – 2010-07-13 01:32:56

0

我不确定您的空指针是否与此代码相关。但是,您在if/else语句的范围内声明board并将该变量返回到作用域之外是非常奇怪的事实。

+0

是啊,我还挺发现错了一半我在做什么了,但后来我说:“拧吧,我去问问计算器” – nn2 2010-07-13 00:23:41