0

ボード ゲームを作成する必要があり、配列 [3][0] "Ursa Major" の左下隅から始めました。「西」に移動すると、NullPointerException が発生します。[2][1]「北東」に斜めに移動するのにも助けが必要ですが、そのコードの書き方がわかりません。任意の助けをいただければ幸いです。

    //Declare Variables
    Map map;
    String input;
    Scanner scan;
    int row, col;

    //Initialize Varibales
    map = new Map();
    scan = new Scanner(System.in);
    row = 3; col = 0;

    //Begin user dialog
    System.out.println("Welcome to the Great Cal Poly Underground");
    input ="";
    while(!input.equals("quit"))
    {
       System.out.println(map.rooms[row][col].name);
       System.out.print(">");
       input = scan.nextLine().toLowerCase();

       if (input.equals("w"))
       {   if(map.rooms[row][col].isValidExit("w"))
           col--;
           else
           System.out.println("You cant go that way");
       }
       else
       if (input.equals("e"))
       {   if(map.rooms[row][col].isValidExit("e"))
           col++;
           else
           System.out.println("You cant go that way");
       }

これが私のユーザー インターフェイスで、これが私のマップです

 Room[][] rooms = new Room[4][4];

Map()
{
   Room lectureHall = new Room();
   Room cafeteria = new Room();

   lectureHall.name  = "Ursa Major";
   lectureHall.exits = new String []{"e"};//can add north south west

   cafeteria.name  = "Los Olivos";
   cafeteria.exits = new String []{"w"}; // can add north south east

   rooms[3][0] = lectureHall;
   rooms[2][1] = cafeteria;

これが私の部屋です

boolean isValidExit(String anExit)
{
    boolean result = false;
    int index = 0;
    while (result == false && index < exits.length)
    {
        if(exits[index].equals(anExit))
            result = true;
        index++;
    }     
    return result;
4

3 に答える 3

1

次のように Java で配列を初期化します。

Room[][] rooms = new Room[4][4];

配列のみを初期化しroomsます。つまり、配列のみが null になることはありません。

ただし、「内部」のオブジェクトは初期化されません。

部屋を熱心に作成し、そのプロパティを設定したい場合は、次のようにします。

Room[][] rooms = new Room[4][4];

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        rooms[i][j] = new Room(...);
    }
}
于 2013-11-15T08:21:42.543 に答える
0

上記のすべての回答を考慮してください。開始セルは部屋[3] [0]です。「西」に移動する場合は、col変数を減らします。

if (input.equals("w"))
{   if(map.rooms[row][col].isValidExit("w"))
    //you are decrementing col, which will become -1 after decrementing
    col--;
    else
       System.out.println("You cant go that way");
}

次に、プログラムはループの先頭に戻り、現在の部屋の名前を表示します。

while(!input.equals("quit"))
{
   System.out.println(map.rooms[row][col].name);
   System.out.print(">");

col = -1 であるため、 map.rooms[3] [-1]を実行しようとしていますが、これは間違いなく例外になります。

< 0 の配列インデックスを参照していないことを確認してください。

于 2013-11-15T08:30:59.143 に答える