2010-07-13 64 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