- ベストアンサー
「配列定数は、イニシャライザーにおいてのみ使用可能です。」
以下のようにして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フィールドの宣言をコンストラクタ内で行うと、エラーは出ないのですが、このフィールドは別のクラスでも使うので、それではダメなのです・・・。 情報が少なくて恐縮なのですが、必要に応じて後から補足させていただきますので・・・。 よろしくお願いいたします。
- Java
- 回答数2
- ありがとう数4
- みんなの回答 (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{...というのがあるのです) 色々わかりにくくてすみませんです・・・。
関連する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[]; すると今度は 『配列を作成するには、配列のサイズまたは配列の初期化子を指定する必要があります。』 というエラー文が出てしまいました。 このとき、配列のサイズも初期化子も指定したくない場合には、どのようにプログラムを書けば良いのでしょうか? お分かりになる方がいらっしゃいましたら、ご助言をお願いします。
- ベストアンサー
- C・C++・C#
- 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-> としても、インテリセンスにこのクラス各フィールドが表示されません。どうしたらいいのでしょうか? 説明不足かもしれませんが、よろしくお願いします。
- 締切済み
- C・C++・C#
- 多次元配列の構造体の初期化
タイトル通りです。やり方がわかりません。 構造体変数の初期化や多次元配列の初期化が載ってるページは多いのですが、コレだけは調べても解りませんでした。 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こんな感じでやりたいんですけど… 初心者でスミマセン。回答いただけたらありがたいです。
- ベストアンサー
- C・C++・C#
- 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)のような定義していますが何かルールのようなものがあるのでしょうか。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- 配列の要素数に変数を入れたいときには
よろしくお願いします。 配列の要素数には定数しか入れられないのですが,どうしても変数を入れたいときは,それを引数として関数を呼び出すしか方法はないでしょうか。 具体的には,scanfで手に入れたint型の変数を要素数とする配列を宣言したいのですが,どうすれば良いでしょうか。 ご教授ください。
- ベストアンサー
- C・C++・C#
- 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
お礼
うまくいきました。わかりにくい質問文にもかかわらず、わかりやすいご回答ありがとうございました。