java-加载不同的映射

java-加载不同的映射,java,arrays,map,applet,Java,Arrays,Map,Applet,好的,我有一个我正在制作的小程序,我想让它根据一个数字生成一个世界 这是: 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

好的,我有一个我正在制作的小程序,我想让它根据一个数字生成一个世界

这是:

 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; }
我用以下方式来称呼它:

板=载重板(1)


我把它放在init()方法中。这样我就可以根据loadBoard()内的号码调用maps。然而,当我开始我的游戏时,我得到了nullpointer异常,我知道这与我刚才向您展示的代码有关。这可能是我犯的新手错误。。也许你能帮忙?

我不确定你的空指针是否与这段代码有关。但是,您在if/else语句的范围内声明
board
,并在范围外返回此变量,这一事实真的很奇怪。

确实如此。再次创建“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=;
私有静态final int[]BOARD2=;
私有静态最终int[]BOARD3=;
私有静态最终int[]BOARD4=;
公共功能int[][]装载板(int选项){
开关(选择){
案例1:返回板1;
案例2:返回板2;
案例3:返回板3;
案例4:返回板4;
默认值:抛出新的RuntimeException(“未知线路板选择”);
}
}

是的,我有点注意到我在中途做的事情是错误的,但我说“去他妈的,我去问问stackoverflow”ps-我在你的代码中得到了“返回板”行的无法到达的声明:SYes。。。删除:)错误留下:)如果您有超过2个“数字”,您可以使用switch语句。请参阅更新的答案,了解超过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" );
   }
 }