• ベストアンサー

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

 以下のようにして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フィールドの宣言をコンストラクタ内で行うと、エラーは出ないのですが、このフィールドは別のクラスでも使うので、それではダメなのです・・・。  情報が少なくて恐縮なのですが、必要に応じて後から補足させていただきますので・・・。  よろしくお願いいたします。

noname#82539
noname#82539
  • Java
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • 配列

     Java初心者です。  RPGを作っているのですが、JPanelを継承したクラスのpaintComponentメソッドで、Stageをインスタンス化すると、 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException というエラーメッセージが表示されてしまいます。  エラーが発生している行は、Stage.javaで、mass_x[0]に値を代入しているところです。DrowMapクラスを継承しているので、その辺でミスをしているのだと思いますが・・・。 ------------Stage.java public class Stage extends DrowMap{  //コンストラクタ  public Stage(){   super();   //////////変数に値を代入(一部略)   //マップに使用する画像   mapImage = "/material/mapchip/s10.png";   //マップの作成   map_arrangement = new int[][]{            {1,1,1,1},            {1,0,0,0},            {1,0,0,0},            {1,1,1,1} };   mass_x[0] = 1;//ここでNullPointerExceptionが発生   mass_y[0] = 1;      mass_x[1] = 1;   mass_y[1] = 16;  } } ----------DrowMap.java abstract public class DrowMap{  //////////変数宣言(一部略)    //読み込んだマップチップから切り取って表示するマス  public int[] mass_x;  public int[] mass_y;  //表示されるマップの配列  public int[][] map_arrangement;    //使用するマップ画像  public String mapImage;    //使用するマップ画像の縦横のサイズ(単位:ピクセル)  public int mapImageSize_yoko;  public int mapImageSize_tate;  /**マップを描画*/  public void drowMap(Graphics g){   mapchip = ImageIO.read(getClass().getResource(mapImage));//try~catchは略   for(int i=0; i < tate; i++){    //マップのX座標を初期化    map_x = 0;    //マップのY座標=フレームの上枠+行数×チップサイズ    map_y = frame_top_border + i * MAPCHIP_SIZE;      for(int j = 0; j < yoko; j++){     //マップのX座標=(回数-1)×マップチップの大きさ+フレームの左枠     map_x = j * MAPCHIP_SIZE + frame_border;       //次に表示するマスの、チップの番号=map_arrangement[i][j]の値     int chipnumber = map_arrangement[i][j];        //画像ファイルから切り取る部分の左上のx座標     source_x = (mass_x[chipnumber] - 1) * MAPCHIP_SOURCE_SIZE;         //画像ファイルから切り取る部分のy座標     source_y = mass_y[chipnumber] * MAPCHIP_SOURCE_SIZE;    }      //マップの描画    g.drawImage(mapchip,    map_x,map_y,    MAPCHIP_SIZE,MAPCHIP_SIZE,    source_x,source_y,    source_x+MAPCHIP_SOURCE_SIZE,    source_y+MAPCHIP_SOURCE_SIZE,    frame);   }  } }  色々と試してみたのですが、解決しません。お分かりになる方いらっしゃいましたら、教えていただけないでしょうか。

    • ベストアンサー
    • Java
  • 【EXECEL】 配列定数の使い方について

    配列定数が入力されたセルを、配列定数として、他のセルに挿入した数式から参照することは可能でしょうか? もし、可能だとすれば、どのようにすれば良いのか教えて下さい。 例えば、今やろうとしていることは以下のとおりです。 A1セルに、={1,2,3,4,5,6,7,8,9,10}、と入力し、 A2セルに、=AVERAGE(A1)、と入力する。 これにより、A2セルに平均値5.5を表示させたい。 このままやっても、A1セル参照値は1となるのか、 表示される平均値は、1になります。 参照の仕方が異なるのでしょうか...

  • C# 配列の変数宣言について。

    C#についての質問です。 新たなint型の配列dataを作るため変数宣言文を、以下のように書きました。 int[] data; すると、以下のような警告文が出ました。 『フィールド'IntArray.data'は割り当てられません。常に既定値nullを使用します。』 そこで調べてみたところ、「newしていないからこのような警告文が出る」ということがわかったので、以下のように書き換えました。 private int[] data = new int[]; すると今度は 『配列を作成するには、配列のサイズまたは配列の初期化子を指定する必要があります。』 というエラー文が出てしまいました。 このとき、配列のサイズも初期化子も指定したくない場合には、どのようにプログラムを書けば良いのでしょうか? お分かりになる方がいらっしゃいましたら、ご助言をお願いします。

  • 数配列の長さ

    あらかじめ決まってないint型の配列の長さはどうのようにして求めたら良いのでしょうか? int array[100];で宣言して実際に数字が入るのは100以下の様な状況 sizeofで調べると100になってしまうので配列の最後に@マークを代入して長さを調べてたのですが何か適切な方法はありますか? プログラミング初心者なのでこれ以上思いつかなかったので適切な方法があればよろしくお願いします。

  • VC++2008で、自作クラスの配列を使う方法は

    下記のようなクラスを作りました。 ref class Card { private: String^ name; // カード名 DateTime date; // 直近引落日 int money; // 直近精算金額 DateTime date2; // 来月引落日 int money2; // 金額 DateTime 3月後; private: 以下省略 プロパティー、コンストラクタ等は、設定しています。 呼び出し側で、以下のように配列宣言し、インスタンス化しました。 private:array<Card^>^ orgCard; this->orgCard=gcnew array<Card ^>(3); これで、 orgCard-> としても、インテリセンスにこのクラス各フィールドが表示されません。どうしたらいいのでしょうか? 説明不足かもしれませんが、よろしくお願いします。

  • 多次元配列の構造体の初期化

    タイトル通りです。やり方がわかりません。 構造体変数の初期化や多次元配列の初期化が載ってるページは多いのですが、コレだけは調べても解りませんでした。 typedef struct{ int flag; ~~~~~(略)~~~ }map_t; map_t map[64][64]; の後、map_t型のmap64*64の int flag全てに値を代入したいのですが 詳しいやり方が解りません。 int hensuu[3][3]={   {1,2,3},{4,5,6},{7,8,9} }; 普通の多次元配列みたいにmこんな感じでやりたいんですけど… 初心者でスミマセン。回答いただけたらありがたいです。

  • Javaの配列に関するエラーに関して

    フィールドでstatic Object [][]a= new Object[80][40];と宣言したにも関わらず、以下の様な部分でエラーが発生します。 場所 a[30][k2]=(""+all);【k2は1から31、allはint型】 エラー Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 30 配列の大きさが足りないことによるエラーかと思われますが、フィールドで宣言している大きさは十分であるにも関わらずエラーが出てしまい、困っています。 このような場合、どの様にすればエラーがなくなるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • c# 配列変数の宣言について

    c#の配列変数の宣言についてですが、 以下の2つの宣言は同じことなのでしょうか。 (1)int[] num = {1,2,3}; (2)int[] num = new int{1,2,3}; 本では(2)のような定義していますが何かルールのようなものがあるのでしょうか。 宜しくお願いします。

  • 配列の要素数に変数を入れたいときには

    よろしくお願いします。 配列の要素数には定数しか入れられないのですが,どうしても変数を入れたいときは,それを引数として関数を呼び出すしか方法はないでしょうか。 具体的には,scanfで手に入れたint型の変数を要素数とする配列を宣言したいのですが,どうすれば良いでしょうか。 ご教授ください。

  • MAPの配列・・・???!!!

    Mapというものを使うのが初めてなのですが、 よくわからなくなってしまいました。 他のプログラムから、 「MAPの配列で返ってくる」 のですが、このMAPの配列をintひとつ、ストリング2つから 作ろうとしているのですが、できずに困っています。 map[0]=("abc","ABC") map[1]=("def","DEF") map[2]=("ghi","GHI") ・ ・ みたいなイメージなのですが、エラーになります・・・ Map[] hairetu = new HashMap(); これでコンパイルできません。 HelloWorldMap.java:17: 互換性のない型 出現: java.util.HashMap 要求: java.util.Map[] Map[] hairetu = new HashMap(); Map[] hairetu; という宣言だけならできます。 受け渡し先でMapの配列を要求しているのでこのような形が必要なのですが・・・ ちなみにソースを見ると hairetu[i].get(キー) みたいなとり方をしています。

    • ベストアンサー
    • Java

専門家に質問してみよう