• ベストアンサー

配列について

class Sample1{ public static void main(String args[]){ int test[] = {89,56,56,77,54}; for(int i =0; i < test.length; i++){ System.out.println((i+1) + "番目の数は" + test[i] +"です。"); } } } >System.out.println((i+1) + "番目の数は" + test[i] +"です。"); の位置のtest[i]ってどこから来たんでしょうか? iには1番目とか2番目などといったものを出力するためにあるのであって、いつの間に89,56,56,77,54といった値が代入されのでしょうか?なんか漠然とした質問なんですがお願いします。

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

  • ベストアンサー
回答No.4

>[i]のiには >>(int i =0; i < test.length; i++) >の時に使っただけで89,56,56,77,54が代入されて >いないように思えるんです。 for文の書式?がわかりにくいのかな? この場合のfor文は A:1番最初にint型のiを宣言して、初期値に0を代入。 ↓ B:「iがtest.length(testという配列の長さ(ここでは5)より小さい」という条件が成り立つ場合に System.out.println((i+1) + "番目の数は" + test[i] +"です。"); という処理を行う。 条件が成り立たなかったらfor文の外に抜ける。 ↓ C:処理を行ったらiに1を足して(i++の部分、i = i + 1と同じ意味。)Bに行く。 (以後B→C→B→CをBの条件に当てはまる限り行う。) ということになっています。 ので、[i]のiには最初にAで0を代入されて、その後は、Cの処理で、その時のiに1を足したものが代入されます。 89,56,…という配列の中身は他の回答者さんの仰るとおりです。 この場合のiはカウンターの様な役割で使っていて、testという配列の「0番目」とか「1番目」とかをさしています。 けっしてiに89,56…といった値を代入しているわけではありません。

nilyannko
質問者

お礼

>この場合のiはカウンターの様な役割で使っていて、testという配列の「0番目」とか「1番目」とかをさしています。けっしてiに89,56…といった値を代入しているわけではありません。 みなさん本当にありがとうございます!! かなり解って来ました(泣 さらにはっきり理解できるようにしっかり確認してみます。

その他の回答 (3)

回答No.3

こういう日本語に置き換えてみるとわかるかも。 「testという名前の配列のi番目の値を出力する」 どうでしょ? ここらへんはJavaに限らず言語の基本なので自分が納得出来るまで調べてくださいね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

私も、それほど言語的にくわしいわけではないので、間違っているかもしれないので参考程度に聞いて下さい。 int test[]; と宣言したら、 testという名前のintを値にもつ配列型(参照型)を確保したことになります。 ただし、このままでは、 test[1]=1; のようには使えません。 testは、配列というタイプであって、(まだ)それぞれの値を保持しているのではないからです。 そこで、 test = new int[5]; などの様に宣言して、intの5つ分の入れ物がある配列を保持するようにします。 新しくnewで確保しない場合、 例えば test2[]という配列が既に在る場合には test = test2; などの様にすることができます。 int test[] = {89,56,56,77,54}; の場合は、{89,56,56,77,54}の部分で int noname[] = new int[5]; noname[0]=89; noname[1]=56; noname[2]=56; noname[3]=77; noname[4]=54; といった配列を名前を付けること無しに、自動的に作成してくれます。 そして、その配列を test=noname; の様に代入して、システムが確保し初期値を割り当てた配列を保持させます。 混同してはいけないのは、先にも述べたように、 test[]としたからといって、test[i]があるというわけではないことです。いわゆる参照型というものは、他にその実体があって、それを指し示すようなものです。[i]は、いってみれば、その実体にアクセスするための演算みたいなものです。 例えば、 int test2[]; test2=test1; として test2[3]=33; とすると、 test[3]が33になります。 このことは、 test,test2が同じ実体を指すようになったということを表していて、 test2=test1; が test2 = new int[5];とされてる時に test2[0]=test[0]; test2[1]=test[1]; test2[2]=test[2]; test2[3]=test[3]; test2[4]=test[4]; とすることとは意味が違います。 ごちゃごちゃいったので混乱されたかもしれませんが、まあ、そういうようなことです。 あと、蛇足ですが、 配列というのは、 test ↓ [89][56][56][77][54] の様に、位置を指していて、 test[0]とかtest[2]とか先頭からの0から始まる相対的な位置を指定して、各要素にアクセスします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>いつの間に89,56,56,77,54といった値が代入されのでしょうか? int test[] = {89,56,56,77,54};

nilyannko
質問者

補足

ごめんなさい!質問の仕方が解かりにくくて。 >int test[] = {89,56,56,77,54}; で代入しているのは解かっているんです。 なぜ[i]で出力すると89,56,56,77,54が表示される のかが解からないんです(泣 [i]のiには >(int i =0; i < test.length; i++) の時に使っただけで89,56,56,77,54が代入されて いないように思えるんです。 もしかしたらすごく馬鹿な質問してるのかもしれません すみません!

関連するQ&A