前回は配列を取り上げました。
その最後で問題を出しましたね。
今回はその解説をしたいと思います。
Q.1から10までの整数の合計値を、配列と「for文」と「複合代入演算子」を用いて求めなさい。
A.
public class Question { <%%KEEPWHITESPACE%%> public static void main(String[] args) { <%%KEEPWHITESPACE%%> int[] n = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; <%%KEEPWHITESPACE%%> int sum = 0;<br /><%%KEEPWHITESPACE%%> for (int i = 0; i < n.length; i++) { <%%KEEPWHITESPACE%%> sum += n[i];<br /><%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> System.out.print(sum); <%%KEEPWHITESPACE%%> } }
実行結果:「55」
こちらが解答の一つとなります。
ではポイントとなる3~8行目を解説していきましょう。
3行目・・・配列nに1~10の整数値を格納しています。
4行目・・・合計値である変数sumに0を代入して初期化しています。
5行目・・・for文繰り返し処理を行います。n.lengthが「10」なので計10回処理を繰り返します。
6行目・・・繰り返す処理です。変数sumにn[0]~n[9]を加算していきます。
sum += n[i]; は sum = sum + n[i]; に書き換えることが可能です。
7行目・・・for文がここで終わります。
8行目・・・7行目でループを抜けた後、合計値である変数sumを出力します。
もちろんプログラムは一通りではありません。
もう一通り紹介しましょう。
public class Question { <%%KEEPWHITESPACE%%> public static void main(String[] args) { <%%KEEPWHITESPACE%%> int[] n = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; <%%KEEPWHITESPACE%%> int sum = 0; <%%KEEPWHITESPACE%%> for (int i : n) { <%%KEEPWHITESPACE%%> sum += i; <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> System.out.print(sum); <%%KEEPWHITESPACE%%> } }
一つ目の解答と比べると5,6行目が変わっています。
これは「拡張for文」といわれる書き方です。
拡張for文とは
拡張for文とは、Java5.0から導入されたfor文の書き方です。
特徴は、書く内容が簡単になった、ということです。
for ( 変数宣言 : 参照変数名 ) {
繰り返し処理
}
このような構文となっています。
変数宣言は参照変数と同じデータ型に合わせてあげる必要があります。
つまり、配列の要素がint型なら変数宣言もint型、String型ならString型に合わせなければいけません。
では解答の1つ目と2つ目のfor文の部分を比べてみましょう。
【一般的なfor文】
for (int i = 0; i < n.length; i++) {
sum += n[i];
}
【拡張for文】
for (int i : n) {
sum += i;
}
拡張for文を使った方が簡単に書けますね。
一般的なfor文と比較してみると、条件式で「何回処理を繰り返す」ということが書かれていません。
これは配列の「全要素」を扱うためです。
つまり、拡張for文が使える場面は、
- 配列のような複数の要素を扱う
- その要素全てを順番に取り出す
以上の場面に限られます。
そしてもう一つ、拡張for文は各要素に対してインデックス(要素に割り振られる番号)を使いません。
そのため sum += n[i]; ではなく、sum += i; と書きます。
「for文」と「拡張for文」には以上のような違いがあるのです。
今回はここまでとします!