[英]How to avoid java.lang.NullPointerException in my Code?
我問了一個關於我的生命游戲實現代碼的問題。 建議的解決方案解決了我的問題,但創建了一個新問題。
現在,如果我嘗試調用getCell()
方法,我會得到java.lang.NullPointerException
。 我怎樣才能避免這個異常?
使用我使用的相應代碼和解決方案代碼鏈接到我之前的問題: 如何在我的 getCell 方法中訪問單元陣列? (爪哇)
或者,如果您只想要代碼:
public class GameMap {
private Cell[][] cellArray;
private static Cell[][] buildCellArray(int width, int height){
Cell[][] cellArray = new Cell[width][height];
int i;
int j;
for(i = 0; i < width; i++) {
for(j = 0; j < height; j++) {
cellArray[i][j] = new Cell();
}
}
return cellArray;
}
public GameMap(int sizeX, int sizeY) {
buildCellArray(sizeX, sizeY);
}
public Cell getCell(int posX, int posY){
return cellArray[posX][posY];
}
}
buildCellArray(sizeX, sizeY);
這確實構建了一個新數組並返回它,但是您沒有將它分配給它需要 go 的那個字段。 您只是丟棄了結果,並且該字段保持原樣( null
)。
你需要做
cellArray = buildCellArray(sizeX, sizeY);
您有一個與 static 方法中的字段同名的局部變量,這有點令人困惑。 但它們完全不相關。 盡量避免這種陰影。 您可以將名稱更改為例如
private static Cell[][] buildCellArray(int width, int height){
Cell[][] newCellArray = new Cell[width][height];
就像 Thilo 提到的那樣,您當前返回您在方法中創建的新單元格數組,但您從未在 GameMap 中分配您的字段“cellArray”。 相反,您定義了一個具有相同名稱的新變量 cellArray,將所有關聯的值存儲在其中,返回它,然后不使用它。
有很多方法可以解決這個問題。 您可以這樣修改您的構造函數:
public GameMap(int sizeX, int sizeY) {
this.cellArray = buildCellArray(sizeX, sizeY);
}
這將在您從 buildCellArray 返回后設置類的cellArray
字段的值。
另一種方法是稍微更改您在buildCellArray
方法中的cellArray
聲明,並在您的方法定義中刪除 static 修飾符。 而不是說:
Cell[][] cellArray = new Cell[width][height];
你可以改為說:
cellArray = new Cell[width][height];
這會起作用,因為在您的第一個示例中,您正在創建一個全新的變量(具有相同的名稱,但在不同的范圍內)。 這意味着您在為它定義所有內容時不引用您的字段cellArray
,而只引用您在buildCellArray
中創建的本地版本。 但是,在此示例中,您將使用原始字段作為參考,而不是變量的本地版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.