3

子オブジェクトへの参照の配列を作成する必要があります。この場合、Roomにはオブジェクトへの参照の配列が必要です:DarkRoomおよびLightRoom。タイプの配列の初期化の行にエラーがありますRoom。何が欠けていますか?

public abstract class Room {

    public Room[][] space = new Room[4][4]; // <<Syntax error on token ";",

    space[0][0] = new DarkRoom();
    space[0][1] = new LightRoom();
    space[1][0] = new DarkRoom();
    space[1][1] = new LightRoom();              
}

public class LightRoom extends Room  { ... }

public class DarkRoom extends Room  { ... }
4

3 に答える 3

6

あなたのデザインは的外れです。クラスは子オブジェクトの配列を保持してはならず、実際、その子クラスについての知識や依存関係を持ってはなりません。これは再帰的で論理的な悪夢です。

Roomクラス内から、HotelクラスやHouseクラスなど、より適切な場所に配列を削除することをお勧めします。

于 2012-04-30T18:07:20.533 に答える
4

初期化は、初期化ブロックまたはメソッドの外部で実行しないでください。代わりに、次のようにしてください。

public Room[][] space = new Room[4][4];
{
    space[0][0] = new DarkRoom();
    space[0][1] = new LightRoom();
    space[1][0] = new DarkRoom();
    space[1][1] = new LightRoom();
}
于 2012-04-30T18:05:33.893 に答える
4

space[][]ブロックについて不平を言っています。クラス定義にコードを書き込むことはできません。

public abstract class Room {

  public Room[][] space = new Room[4][4]; // << error Syntax error on token ";",

  public Room()
  {
    space[0][0] = new DarkRoom();
    space[0][1] = new LightRoom();
    space[1][0] = new DarkRoom();
    space[1][1] = new LightRoom();
  }
  }
于 2012-04-30T18:07:20.930 に答える