2D配列を返すときにgetCaveメソッドが呼び出されると、NullPointerExceptionが発生します。私は解決策をオンラインで見つけることができませんでした。例外なく実行するプログラムを、配列ではないが、私のニーズに合わない新しい洞窟に置き換えることで得ることができます。ここに私のコードの簡易版は、次のとおりです。ここ異なるメソッドで埋められる配列を返すNullPointerException
import java.util.Random;
public class Board {
public static final int DEFAULT_ROWS = 10;
public static final int DEFAULT_COLS = 10;
Cave[][] caveArray = new Cave[DEFAULT_ROWS+2][DEFAULT_COLS+2];
public Board(int rows, int cols){
Random rand = new Random();
for (int j = 1; j < (cols+1); j++) {
for (int i = 1; i < (rows+1); i++) {
Cave temp;
temp = new Cave(i, j);
int rnum = rand.nextInt(100)+1;
if (rnum > 50) {
caveArray[i][j]=temp;
caveArray[i][j].makeBlocked();
}
else if(rnum <=50) {
caveArray[i][j]=temp;
caveArray[i][j].makeOpen();
}
}
}
}
public Cave getCave(int r, int c){
return caveArray[r][c];
}
}
は、発信者である:
呼び出すprivate void newGame() {
// Set up the game board.
gameBoard = new Board(DEFAULT_ROWS, DEFAULT_COLS);
// Set up the 3 characters.
characters = new ArrayList<Character>();
// Add the adventurer (always in the top left).
characters.add(new Adventurer(gameBoard.getCave(0, 0)));
selected = 0; // Initially select the adventurer.
}
:
パブリッククラス冒険が文字呼び出す{
Adventurer(Cave initLoc) {
super(initLoc);
}
を拡張します:
public abstract class Character implements CaveWorker{
protected Cave location;
public Character(Cave initLoc){
location = initLoc;
location.setOccupied(true);
}
このコードは、あなたがこれを呼び出すコードを取得できますか? – FrankieTheKneeMan
どのラインがNPEの原因となるのでしょうか?なぜなら、これまでに投稿されたコードに基づいて原因を見ていないからです。 –
また、Javaでのインデックス作成がゼロから始まることを明確に認識しています。回避策を選択した理由はありますか?私は、getCaveが引数の1つとしてゼロで呼び出されていると強く思っています。そのため、nullPointerを取得しています。 – FrankieTheKneeMan