- ベストアンサー
特殊なfor文について
SJC-P 問題集 問13の疑問より for文について教えてください。 一般的なfor文だと次の形だと思うのですが for(int i = 0; i < 5; i ++){ //5回ループする } Animal [] animals = { new Animal(), new Cow() }; for( Animal a : オブジェクト配列animals ){ a.saySomething(); } のような場合、このfor文は 「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか? for( クラス名 オブジェクト名 : オブジェクト配列) の一文にある「:」← の役割は何なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか? いやいや、そうじゃない。 for (変数 : 配列またはコレクション ) これは、配列またはコレクションに保管されている要素を1つずつ取り出し、変数に設定してその後のブロックを実行する、ということ。配列などの全要素に対し同じ処理を実行するのに用いる。 >「:」← の役割は何なのでしょうか? 役割というか、「そう書く」と決まっているだけだからなぁ。つまりは、「:の後にある配列から順に値を取り出して、:の前にある変数におさめる」というのにこう書く、ということ。そう書く決まりだから、役割というほどのものでもない。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
他の言語で言うところのforeach構文ですね Wikipediaの解説です↓ http://ja.wikipedia.org/wiki/Foreach%E6%96%87
補足
ありがとうございます。 現時点で解説を読ませていただいて、理解度的に90%ぐらいだと思うのですが、合っていますでしょうか? >プログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文 ・リストやハッシュテーブルなどのデータ構造の各要素 "a""b""c" という各要素があれば、 「その各要素 一つずつに対してfor文の中を実行するという意味でしょうか?」
お礼
ありがとうございます。 for( Animal a : オブジェクト配列animals ) は、 Animal a より「a」という変数を生成しているところから for (変数 : 配列またはコレクション ) の定義に当てはめることができているということですよね? 後のブロックを実行というのは、 ↓の{}の中のことでしょうか? ------------------------------------------ for (変数 : 配列またはコレクション ){ } ------------------------------------------ >「:の後にある配列から順に値を取り出して、:の前にある変数におさめる」というのにこう書く こちらを例とすると for(Animal a : animals[オブジェクト配列] ){ a.saySomething(); } (1) 配列の中の1番目の要素を取り出す → 配列1番目のオブジェクトにあるsaySomething()を実施 (2) 配列の中の2番目の要素を取り出す → 配列2番目のオブジェクトにあるsaySomething()を実施 という意味になる、という解釈で合っていますでしょうか? ;