- ベストアンサー
「配列定数は、イニシャライザーにおいてのみ使用可能です。」
以下のようにして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フィールドの宣言をコンストラクタ内で行うと、エラーは出ないのですが、このフィールドは別のクラスでも使うので、それではダメなのです・・・。 情報が少なくて恐縮なのですが、必要に応じて後から補足させていただきますので・・・。 よろしくお願いいたします。
- みんなの回答 (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; } } } ってのでどうでしょう?
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
>このフィールドは別のクラスでも使うので、それではダメなのです・・・。 ここの意味がよくわかりません。 class MapData にフィールドとして宣言されている int[][] map と MapData のコンストラクタで宣言されているローカル変数 int[][] map は別物なんですよね? そしてクラス変数を別のクラスでも使うとは?
お礼
ご回答ありがとうございます。 すみません、コンストラクタ内のint[][] mapは消し忘れでした。 別のクラスで使うというのは、別のクラスに継承して使うということです。(別にclass Map extends MapData{...というのがあるのです) 色々わかりにくくてすみませんです・・・。
お礼
うまくいきました。わかりにくい質問文にもかかわらず、わかりやすいご回答ありがとうございました。