ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

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( クラス名 オブジェクト名 : オブジェクト配列)
の一文にある「:」← の役割は何なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか?



いやいや、そうじゃない。

for (変数 : 配列またはコレクション )

これは、配列またはコレクションに保管されている要素を1つずつ取り出し、変数に設定してその後のブロックを実行する、ということ。配列などの全要素に対し同じ処理を実行するのに用いる。

>「:」← の役割は何なのでしょうか?

役割というか、「そう書く」と決まっているだけだからなぁ。つまりは、「:の後にある配列から順に値を取り出して、:の前にある変数におさめる」というのにこう書く、ということ。そう書く決まりだから、役割というほどのものでもない。
    • good
    • 0
この回答へのお礼

ありがとうございます。


for( Animal a : オブジェクト配列animals ) は、
Animal a より「a」という変数を生成しているところから

for (変数 : 配列またはコレクション ) の定義に当てはめることができているということですよね?

後のブロックを実行というのは、

↓の{}の中のことでしょうか?
------------------------------------------
for (変数 : 配列またはコレクション ){

}
------------------------------------------


>「:の後にある配列から順に値を取り出して、:の前にある変数におさめる」というのにこう書く

こちらを例とすると
for(Animal a : animals[オブジェクト配列] ){
a.saySomething();
}

(1) 配列の中の1番目の要素を取り出す → 配列1番目のオブジェクトにあるsaySomething()を実施
(2) 配列の中の2番目の要素を取り出す → 配列2番目のオブジェクトにあるsaySomething()を実施

という意味になる、という解釈で合っていますでしょうか?

お礼日時:2009/05/28 22:19

他の言語で言うところのforeach構文ですね


Wikipediaの解説です↓
http://ja.wikipedia.org/wiki/Foreach%E6%96%87

この回答への補足

ありがとうございます。
現時点で解説を読ませていただいて、理解度的に90%ぐらいだと思うのですが、合っていますでしょうか?

>プログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文

・リストやハッシュテーブルなどのデータ構造の各要素
"a""b""c" という各要素があれば、
「その各要素 一つずつに対してfor文の中を実行するという意味でしょうか?」

補足日時:2009/05/31 09:53
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む


人気Q&Aランキング