• ベストアンサー

「配列定数は、イニシャライザーにおいてのみ使用可能です。」

 以下のようにしてjavaファイルを作成したのですが、eclipse(3.2)では、「配列定数は、イニシャライザーにおいてのみ使用可能です。」というメッセージが表示されてしまいます。下線は、mapの値全体({{1,1,以下)に表示されています。これに対策するにはどうすればよいのでしょうか? package map; import...(略) public class MapData extends Setting{ int[][] map; int HotelRoom = 1; public MapData(int mapname){ switch(mapname){ case HotelRoom: int[][] map = new int[15][15]; map = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; } } }  mapフィールドの宣言をコンストラクタ内で行うと、エラーは出ないのですが、このフィールドは別のクラスでも使うので、それではダメなのです・・・。  情報が少なくて恐縮なのですが、必要に応じて後から補足させていただきますので・・・。  よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

map = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; って使い方はできません。 int map[][] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; として使います。 なので、 package map; import...(略) public class MapData extends Setting{ private int[][] bufMap = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; public int[][] map; public int HotelRoom = 1; public MapData(int mapname){ switch(mapname){ case HotelRoom: map = bufMap; } } } ってのでどうでしょう?

noname#82539
質問者

お礼

 うまくいきました。わかりにくい質問文にもかかわらず、わかりやすいご回答ありがとうございました。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>このフィールドは別のクラスでも使うので、それではダメなのです・・・。 ここの意味がよくわかりません。 class MapData にフィールドとして宣言されている int[][] map と MapData のコンストラクタで宣言されているローカル変数 int[][] map は別物なんですよね? そしてクラス変数を別のクラスでも使うとは?

noname#82539
質問者

お礼

 ご回答ありがとうございます。  すみません、コンストラクタ内のint[][] mapは消し忘れでした。  別のクラスで使うというのは、別のクラスに継承して使うということです。(別にclass Map extends MapData{...というのがあるのです)  色々わかりにくくてすみませんです・・・。

関連するQ&A