2012-03-17 9 views
0

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); 
} 
+1

このコードは、あなたがこれを呼び出すコードを取得できますか? – FrankieTheKneeMan

+0

どのラインがNPEの原因となるのでしょうか?なぜなら、これまでに投稿されたコードに基づいて原因を見ていないからです。 –

+0

また、Javaでのインデックス作成がゼロから始まることを明確に認識しています。回避策を選択した理由はありますか?私は、getCaveが引数の1つとしてゼロで呼び出されていると強く思っています。そのため、nullPointerを取得しています。 – FrankieTheKneeMan

答えて

1

私はcaveArray[0][c]、またはさらにcaveArray[r][0]にインデックスを作成しようとすると、そこに何もないことになるスタックトレースを観察せずに提供できる唯一の説明です。

2つのオプションがあります。配列がインデックス0から始まる(それほど悪くない)という事実を利用するか、Caveオブジェクトを行0と列0にプリエンプティブに配置します。ただし、(0,0)との整列は簡単です。

+0

ありがとうございました!私は[0] [0]ポジションが呼び出されているのを見たことがないと信じられず、洞穴で満たされていませんでした。また、将来私はスタックトレースを使用します。 – fotonphorces

関連する問題