好,所以我要制作这个小程序,并希望它根据数字生成一个世界...
这里是:
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; }
并称之为:
板= loadBoard(1);
我把它放在init()方法中。这样,我就可以根据loadBoard()中的数字调用映射。但是,当我开始游戏时,我得到了nullpointer异常,并且我想知道事实,这与我上面显示的代码有关。这可能是我正在做的菜鸟错误。也许您可以帮忙?
最佳答案
它是。您再次创建“ 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 },
}; }
}
如果我现在要计划要拥有多少个“数字”,它甚至可以简化得多:)
另一个建议是不要动态创建数组,而应将它们作为常量。然后从该方法返回适当的数组。您的代码可能如下所示(超过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" );
}
}