連載
» 2008年02月14日 00時00分 公開

Java SE 5.0の新機能、拡張for文を習得するソースコードで学ぶ SJC-P 5.0 ドリル(4)(2/2 ページ)

[山本道子,有限会社 Ray]
前のページへ 1|2       

解答

 A、C

解説

 拡張for文の構文は以下のとおりです。

for (変数宣言: 参照変数名) { …… }

 変数宣言と参照変数名の間は、:(コロン)です。選択肢Bは;(セミコロン)のためコンパイルエラーです。なお、繰り返し処理をする文が1文しかない場合、処理文を囲む{}を省略してもかまいません。

B.for (String s ; str) System.out.println(s);

 選択肢Cは、従来のfor文の記述であるため、問題なくコンパイル・実行が可能です。

C.for (int i = 0; i < str.length; i++) System.out.println(str[i]);

 選択肢Dは、Java言語にはforeachキーワードはないためコンパイルエラーです。

D.foreach(str) System.out.println(str);

 選択肢Eは、配列に対してhasNext()メソッドやnext()メソッドは使用できないためコンパイルエラーです。

E. while(str.hasNext()) System.out.println(str.next());
【問題】
次のソースコードがあります。
class Test {
  public static void method(String... str) {
    [     (1)     ]
  }
  public static void main(String[] args) {
    String[] str = {"tanaka", "yamamoto", "suzuki"};
    method(str);
  }
}
上記のプログラムを正しくコンパイルするために、
空欄(1)に入るソースコードはどれですか?2つ選択してください。
A.for (String s : str) System.out.println(s);
B.for (String s ; str) System.out.println(s);
C.for (int i = 0; i < str.length; i++) System.out.println(str[i]);
D.foreach(str) System.out.println(str);
E. while(str.hasNext()) System.out.println(str.next());

さらにもう一歩

 通常のfor文は、カウンタ変数をインデックスに指定して特定の要素を取り出すことが可能です。それに対し、拡張for文は配列やコレクションのデータを順番に取り出すために単純化された文であるため、カウンタ変数は隠ぺいされています。もし、インデックスで指定して特定の要素を取り出したいのであれば、別にカウンタ変数となる変数を用意する必要があります。しかしその結果、ソースコード量が増えることになり、拡張for文を使用するメリットがありません。

 従って、ループ中にインデックスを指定して要素を取得する必要があれば通常のfor文を使用し、各要素を順番に1つずつ参照するのであれば、拡張for文を使用するように使い分けましょう。

 1. import java.util.*;
 2. 
 3. class Sample2 {
 4.   public static void main(String[] args) {
 5.     ArrayList array = new ArrayList();
 6.     array.add("index 0");  array.add("index 1");
 7.     array.add("index 2");  array.add("index 3");
 8.     System.out.println("通常のfor文");
 9.     for(int i = 0; i < array.size(); i++) {
10.       if(i%2 == 0) {
11.         System.out.println(array.get(i));
12.       }
13.     }
14.     System.out.println("拡張for文");
15.     int i = 0; 
16.     for(String val : array) {
17.       if(i%2 == 0) {
18.         System.out.println(array.get(i));
19.       }
20.       i++;
21.     }
22.   }
23. }
サンプルコード2
C:\sample>
C:\sample>java Sample2
通常のfor文
index 0
index 2
拡張for文
index 0
index 2
C:\sample>
サンプルコード2の実行結果

筆者紹介

山本道子

有限会社Ray代表。千葉県出身。一般事務、派遣を経て2000年サン・マイクロシステムズ入社。J2SEのほか、J2EEなどサーバサイドJavaコース担当およびテキスト開発に携わる。2004年退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆などを手掛けている。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。