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と関連する良く見られている質問

Qクーラーボックスと保冷剤について

この前質問したのですが再度質問させていただきます。クーラーバッグに保冷剤を入れておくと半日ほど冷やしておくことができるということがわかったのですが入れる袋はクーラーバッグではなくてもいいのですか?たとえばお弁当を入れるようなサイドバッグに果物など入れて保冷剤をいれればいいですか?それとも保冷剤はクーラーバッグに入れるから効果を表すんですか?また保冷剤は凍らせて何度も使えるんですか?質問をまとめると
1.保冷剤を入れるのはクーラーバッグでなくてもいいのか?
2.保冷剤は何度も再利用できるのか?

です。よろしくお願いします。

Aベストアンサー

1)クーラーバックだと断熱がいいので、
  より高い保冷効果を長時間保てるという事です。
  なければ、タオルにくるんでもいいのですが、
  夏場炎天下だと、かなり保冷時間は短くなります。

2)保冷剤と銘打っている物は、冷凍庫で凍らせて、
  何度も再利用できます。
  
  

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

Qパソコンの上に保冷剤を置いているんですが

最近とても暑く、パソコンを動かしていると高温になるのでケーキを買うと入っているような保冷剤にタオルを巻いてパソコンの上においています。
スリムタワー型パソコンで横にして置いているのでその上に保冷剤を置いているんですがそれを見た父親に熱がこもって火事になるとか言われました。
実際保冷剤のおかげでパソコン本体は少し冷たくなっています。
保冷剤を置いている位置はファンの真上というわけでもありません。
こういう状態でも本当に火事になると思いますか?

よろしくお願いします。

Aベストアンサー

やめたほうが良います。本来の使用法以外の使い方を
すると事故の元です。
ケースを冷やしてもまったく意味がありません。内部の熱を
排気することを考えたほうがいいです。

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

Q保冷剤について

旅行先でクーラーボックスを使用するのですが、ホテルに冷凍庫がついておらず、保冷剤を凍らすことができません。
水につけると冷える保冷剤があると聞いたのですが、ネットで検索してもアウトドア用品が置いてある店に行っても見つかりません。
どなたかそのような保冷剤をご存知でしたら教えてください。
よろしくお願い致します。

Aベストアンサー

釣具店で見ました 袋の中央に仕切りがありA液剤とB液が入っていてた 使う時に仕切りを手で破ると混ざり瞬間に凍ります 一回限りですが冷蔵庫で凍らせば繰り返し使用可能との事 アウトドア 釣具店でお探しになられては

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

Q保冷剤を飲み物の氷代わりにって大丈夫?

スーパーなんかでもらえるビニール製の保冷剤。

そんな保冷剤をコップに入れて氷代わりに、

なんて使い方は大丈夫なんでしょうか?

自分の部屋の冷蔵庫の氷がまっできていないときなんかには、

ひえっひえの保冷剤を入れたくなります。

ただ衛生的に大丈夫なんでしょうか?

「中身は水道水です」とは書いているのですが、

やっぱりどこか不安です。

大丈夫でしょうか?(嫌なら使わなければいいじゃん とは言わずに・・・)

Aベストアンサー

保冷剤のパッケージの外側が清潔に保たれ、汚染されていないこと。
また破れなどがなく、中身が漏れ出す心配がないこと。

以上が確実なら、大丈夫でしょう。
中身が水道水で漏れ出しても影響ない(万一食べてしまっても無害)とはいっても、飲み物に直接入れるような想定はされていませんから。

そもそも、飲み物の中に入れるなんて使い方をするものではないので、私ならやりません。
保冷剤を数個ボウルに入れ、水を入れ、飲み物を容器ごと浸けるとかならアリですけど。

Qイベントリスナに登録される function(e){} の "e" はeventオブジェクト?

私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。
最近、下記コードを実行することで、

<script type='text/javascript'>
window.addEventListener ('click', function(e){
console.info(e);// 引数をコンソール表示 (要Firebug)
for (p in e){
console.info(p + ' = ' + e[p]);// プロパティを列挙
}
}, false);
</script>

「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。
ただ、疑問点も残ります。
私の理解では、匿名関数は

(function(str){
alert(str);
})('Hello');

のように明示的に引数を渡さなければ、引き渡された値は undefined となるはずでした。

変数eの値はどこから出現したのでしょうか?
そもそも、変数eはeventオブジェクトなのでしょうか?

私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。
最近、下記コードを実行することで、

<script type='text/javascript'>
window.addEventListener ('click', function(e){
console.info(e);// 引数をコンソール表示 (要Firebug)
for (p in e){
console.info(p + ' = ' + e[p]);// プロパティを列挙
}
}, false);
</script>

「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。
ただ、疑問点も残ります。
私の理解では、匿名関数は

...続きを読む

Aベストアンサー

イベントハンドラにはイベントオブジェクトが自動的に渡されます。
https://developer.mozilla.org/ja/DOM/event

IEではwindowオブジェクトにeventが括り付けられていて参照可能となっているので、(たしか)このような動作はしませんね。

Q保冷剤の変色

こんばんわ。
ケーキとかに使われている、小さい保冷剤についてなのですが、
以前、少しまとめ買いして、ちょっと使って、箱に入れた状態なのですが、封をよくしないで
冷蔵庫の奥にしまっていました。
最近、使おうとひっぱりだしたのですが、保冷剤が所々、黄色く変色していました。
この黄色く変色した保冷剤は使っても大丈夫なのでしょうか?
どなたか、アドバイスおねがいします。

Aベストアンサー

保冷剤(蓄冷剤とも言いますが)は、原料の99%は「水」です。

他に、「吸水性ポリマー」、「防腐剤」、「形状安定剤」などが入っています。

これらは、全て「食品衛生法」で使用が認められている物質であり、仮に誤って口の中に入れても、害はありません。

容器の破損や、「ゲル剤」の粘度が低下した場合は交換時期ですが、まだ保冷の能力があるなら、使用しても問題無いと思われます。

Q変数?配列?の値の代入[ ]と{}?

こんにちは,よろしくお願いします。
JavaScriptで次のような変数の代入と思われる式の意味を教えてください。

 var testValue = {};
 var hsValue = [];

いろいろ探してみましたがはっきりしたことがわかりません。すみませんがよろしくお願いします。

Aベストアンサー

>代入を表すということでよろしいのでしょうか?

文法上そうなんですがどちらかというと宣言文だと考えれば
いいんじゃないですか?

>var testValue = {};
var testValue = new Object();

>var hsValue = [];
var hsValue = new Array();


人気Q&Aランキング

おすすめ情報