• 締切済み

配列が使えない

double Rand[] = new double[5]; Rand[0] = 6.28; Rand[1] = 7.28; Rand[2] = 8.28; Rand[3] = 9.28; Rand[4] = 10.28; 以上のような配列の記述を含んだソースファイルをコンパイルすると ']'がありません といったメッセージが出てきてコンパイルエラーが出てきます。 ただし double Rand[] = {6.28,7.28,8.28,9.28,10.28}; といった宣言の仕方をするとコンパイルエラーが出てきません。 for文などを使いたいので最初のほうの方法で配列を使いたいのですがどうしたらよいのでしょうか。 Java初心者の私にぜひ教えてください。お願いします。

  • yuk2
  • お礼率35% (246/697)
  • Java
  • 回答数5
  • ありがとう数4

みんなの回答

  • kaihou100
  • ベストアンサー率83% (10/12)
回答No.5

 ん~。  どうもかかれている範囲にはエラーが無いようですね…。  ということは、他の部分に原因があるように見えます。  まだ、解決されていないのなら、作成したクラスを 全文、コピー&ペーストで貼り付けると、もう少しなにか 分かるかもしれません。  または、ご自身のサイトに圧縮してuploadしておくとか

yuk2
質問者

お礼

おこたえいただきありがとうございます。 問題は根本的に解決していませんが書いた範囲以外に有りそうと解っただけでも科なりの前進になったと思います。 何とか自分で頑張ってみたいと思います。 ありがとうございました。

回答No.4

yuk2さん解決できましたか?このページの1番下に貼ってあるエラー文を見たところ Rand[0] = 6.28; の1つ前の文章の } が抜けているのではないでしょうか? それか Rand[0] = 6.28; の文以前にエラーがある可能性がかなり高いと思います。 Rand[0] = 6.28; の前に何行あるか知りませんが、この文の前にエラーがあると思います。 がんばってください。

yuk2
質問者

お礼

お答えいただきありがとうございます。 「Rand[0] = 6.28; の1つ前の文章の } が抜けているのではないでしょうか? 」 と言う所はかなりありがたいアドバイスになると思います。 まだJavaの勉強が足りていないのでお答えを参考にして頑張ってみたいと想います。 ありがとうございました。

  • aton
  • ベストアンサー率47% (160/334)
回答No.3

もしかしたら,Randという名前のクラスを同じスコープ内で別に使用していませんか? (例えば,import somepackage.Rand; として別に定義したクラスRandをimportしてるとか) #1の補足に, > test.java:14:シンボルを解釈処理できません。 > シンボル:クラス Rand > 位置 :testのクラス > Rand[0] = 6.28 > ^ とあるので,Randは変数ではなくクラスとして解釈されているように思えます。 例えば,配列変数名を randomNumber などに変更して, double randomNumber[] = new double[5]; randomNumber[0] = 6.28; randomNumber[1] = 7.28; randomNumber[2] = 8.28; randomNumber[3] = 9.28; randomNumber[4] = 10.28; として試してみてください。

yuk2
質問者

お礼

おこたえいただきありがとうございます。 示して頂いた通りにやってみたのですが。結果は駄目でした。 でも問題が変数の書きかたではなさそうだと言うことで一歩前進したと想います。ありがとうございました。

  • kaihou100
  • ベストアンサー率83% (10/12)
回答No.2

多分に、一般的なコンパイラの字句解析機の動きから考えて、 double Rand[] と変数Randが double[]であると宣言している つもりの場所が、変数Rand[]がdoubleであると宣言されて いると解釈されてしまい、変数Randの値が見つからないと 言われているように見えるのですが。  私のほうで元ソースをチェックしたところ、wogotaさんの ように、問題なくコンパイルが通りましたので。 (Win2000Pro + Sun J2SDK1.4.0_01)  そこでお尋ねいたします。 1. 利用しているOSは? 2. 利用しているJVMの製造元と製品名、バージョンは? 3. 利用している統合開発環境の名前は?  3は利用なされている場合のみで十分ですが、1と2は なるべく詳しく答えていただければ、多分に結論が 出やすくなると思われます。

yuk2
質問者

お礼

お答えいただきありがとうございます。 1.OSはWindows98です 2.JVMはJ2SDK1.3 です。これ以上のことは私には分かりません。 是非、お願いします。教えてください。

  • wogota
  • ベストアンサー率42% (66/154)
回答No.1

最初の例で、問題なくコンパイルできます。 なので、なぜエラーが出てくるかがわかりかねます。 本当は、javacが吐き出すエラーメッセージを貼り付けていただいたら、 原因がわかる方が大勢居られると思いますので、まず、 エラーメッセージを補足していただけますか。

yuk2
質問者

補足

おこたえいただきありがとうございます。 正確には下記のようなメッセージが出ます。分かりましたら是非お答えをお願いします。 test.java:14:']'がありません。 Rand[0] = 6.28; ^ test.java:14:<identifier>がありません。 Rand[0] = 6.28; ^ test.java:14:シンボルを解釈処理できません。 シンボル:クラス Rand 位置 :testのクラス Rand[0] = 6.28 ^ 

関連するQ&A

  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • 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
  • 多次元配列は配列の配列である

    Java勉強中なんですが、参考書を読んでいて「多次元配列は、実際には配列の配列である。つまり、2次元配列(array[][])がある場合、実際にはこれをarray[0]、array[1]、array[2]、といった1次元配列に配列として扱う事ができる。」と書いてあり、例題で、 double array[][] = new double[5][]; array[0] = new double[500]; array[0] = new double[400]; array[0] = new double[300]; array[0] = new double[200]; array[0] = new double[100]; と書いてありました。これについてのこれ以上の説明はなく、理解できなくて困っています。ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 配列に関してです。

    Dim a(,) As Integer a= New Integer(,) {0,300,400,400,500,600,700,800}  {400,500,700,800,1000,1200,1300,1500}   {700,1000,1300,1600,2000,2000,2000,2000}   {1300,2000,2000,2000,2000,2000,2000,2000} ローカルレベルでこのように配列を宣言したのですが ・配列初期化子の次元が少なすぎます。 ・構文エラーです。 とエラーが出てしまいます。 この宣言、初期化の仕方のどこがおかしいのでしょうか?

  • 配列名の異なる配列を一気に100個生成する方法はありますか?

    配列名の異なる配列を一気に100個生成する方法はありますか? double[] a1 = new double[50] double[] a2 = new double[50]       ・       ・       ・ double[] a100 = new double[50]; といちいち100回宣言するのがめんどうなのでいい方法はないでしょうか?

    • ベストアンサー
    • Java
  • 初期値を持ったクラスの配列を使うには?

    C、C++の経験はけっこう長いのですが、javaは初心者です。 初期値を持ったクラスの配列はC++だとたとえば、 class User { char * name; int user_id; }; と宣言しておいて、 User user[] = { {"moritan2", 12345}, {"moritan3", 56789}, }; と書けますよね。これをjavaでやるにはどうすればいいのでしょうか? javaで class User { String name; int user_id; }; と宣言しておいて、 User user[] = { {"moritan2", 12345}, {"moritan3", 56789}, }; とやってもコンパイル時にエラーになってしまいます。

    • ベストアンサー
    • Java
  • 共用体の配列 [C言語]

    今C言語のプログラムを組んでいたのですが、共用体の配列あるわけないと思いつつ共用体の配列を宣言したソースをコンパイルして見ました。そしたら普通にコンパイルできてしまったんです。びっくりしてその配列に値を代入したのですが、それはコンパイルエラーが出ました。共用体の配列なんてあるのでしょうか?回答よろしくお願いします。

  • 配列について

    string[] array = new string[200]; というように、arrayという配列を宣言して、そこに CheckBox.Textを入れていきたいんですが、 stringを暗黙的にstring[]に変えれません。というようなエラーがでます。 やっぱり、こんなふうにテキストを配列に入れることは無理なんでしょうか?? 初心者であんまり分からなくて、文章が分かりづらいと思いますが、アドバイスお願いします(><)

  • 動的配列

    二次元配列を動的に確保したいのですが,初歩的なところでつまづいてしまいました. どなたかご教授ください. C++ Builder 6を使用しております. SumF[5][40]と確保したいのです. 以下,プログラムです. ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ double **SumF; SumF = new double *[5]; for(int p = 0; p < 5; p++){ SumF[p] = new double [40]; for(int q = 0; q < 40; q++){ SumF[p][q] = new double; } } ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 「浮動小数点の不正な使用」とエラーがでます. よろしくお願いいたします.

  • 2次元配列のnew

    4x4行列のデータがいくらか書いてあるファイルから、読み込んでvector配列へ保存するプログラムを考えています。 vector配列は、float[4][4]の先頭ポインタの配列です。 宣言はこんな感じで、コンパイルエラーは出ませんでした。 vector<float[4][4]> matrix; つぎに読み込み部分で、下のような感じです。 4x4行列が見つかるたびにこれが実行されます。 GetFloatToken()は、ファイルから要素をひとつ取り出す関数です。 float m[4][4] = new float[4][4]; for(int g=0; g<4; g++) for(int r=0; r<4; r++) m[g][r]=GetFloatToken(); matrix.push_back(m); newの行とpush_backしてる行でエラーが出ました。 自分が思うに、m[4][4]のとこの、newからの受け取りの仕方が悪い気がしました。 そこで、*m[4] や **m とかにして試してみましたがうまくいきませんでした。 どうすればいいんでしょうか。 もしかして、c++では多次元配列のnewは無理なんでしょうか。 わかる方がいましたら、どうか教えてください。 補足: あとで行列の計算をするのが楽なので、float[4][4]の形は変えたくないです。 もし、多次元配列のnewが無理ということなら別の策を考えます。