Java言語の繰り返し処理
コンピュータのプログラムの処理には、大きく分けて、順次処理(じゅんじしょり)、分岐処理(ぶんきしょり)、繰り返し処理という、3種類の処理によって構成されています。
もちろん、Java言語も例外ではありません。Java言語にも、繰り返し処理の命令が備わっています。
繰り返し処理は別名ループ処理と言い、決められた回数、もしくは無制限に指定された処理繰り返す処理をさします。
ここでは、その中の一つであるfor文について説明していくことにします。
for,while,do while
for文について説明する前に、Java言語で用いられる繰り返し処理についての概要を説明しましょう。
Java言語は、C言語の影響を強く受けて作られた言語です。そのため、繰り返し処理も、C言語と同じものが用意されています。それが、while文、do~while文、およびfor文です。
この中で、もっとも使用頻度が高いのが、最後に説明したfor文です。
たとえば、以下のようなプログラムを実行してみてください。
public class ForSample1 {
public static void main(String[] args) {
for(int i = 0;i < 5;i++){
System.out.print(i+" ");
}
System.out.println();
}
}
すると、画面に「0 1 2 3 4」という文字列が表示されます。実行結果から判るとおり、for文の中にある表示処理が繰り返されて、この結果が得られたことが判ります。
for文の仕組み
では、一体for文はどのような仕組みになっているのでしょうか。for文の書式は、以下の通りになっています。
for ( 初期化処理 ; 条件式 ; 増分処理 ){
処理
}
前述のサンプルにあてはめてみると、初期化処理の部分で「i = 0」としています。
そのため最初はiの値は0から始まることがわかります。
続いて条件式ですが、if文で用いられるものと同じもので、この場合「i< 5」ですから、iが5未満の場合、この処理は継続されるます。
最後に増分処理には「i++」となっていますが、これは、インクリメントと言って、iの値を1増加させる処理なのです。
つまり、このfor文は、i=0から始めて、iを一つずつ増分させ、iが5未満ならば{}内の処理を実行することを繰り返します。
最後に、iが5以上となれば、ループから抜ける という処理になるのです。
増分処理
ちなみに、if文は、前述のインクリメントおよび、デクリメントという処理をよく行います。デクリメントとは、インクリメントの反対で、変数の値を1減らす処理です。
例えば、iをデクリメントする場合、「i–」と記述することが出来ます。
ちなみに、この「++」および、「–」は、変数のどちら側に書いてもかまいません。
++i,–i
のように前方に各方式を前置、逆に
i++,i–
のように後に各方法を後置と言います。
もちろん、インクリメント・デクリメントばかりがfor文で用いられる全てではありません。
例えば、
for(inti = 0 ; i 0 ; i-=3)
とすると、iは「12 9 6 3」といったように、3ずつ減っていきます。
Forの多重ループ
for文の使われ方とよくあるのが、多重ループと言われる方法です。これは、判りやすく言うと、「for文のなかにfor文が入っている」という状態です。例えば、以下のようなものです。
public class ForSample2{
public static void main(String[] args) {
// forの二重ループ
for(int i = 1;i <= 2;i++){
for(int j = 1; j <=3 ; j++){
int k = i + j;
System.out.print(i+" "+j+"="+k+" ");
}
System.out.println();
}
}
}
このサンプルでは、iによるループが2回、jによるループが3回なので、2×3=6回、処理が繰り返されます。このループはforば二重なので、forの二重ループとも呼ばれます。
なお、三重、四重のループも作ることは出来ますが、余りやりすぎるとプログラムが複雑になりすぎるので注意が必要です。
for文と配列
さて、このfor文ですが、実は配列変数と大変相性がよく、しばしばセットで用いられます。例えば、
public class ForSample3{
public static void main(String[] args) {
int n[] = { 5,4,3,2,1 };
// 整数型配列変数nの成分表示
for(int i = 0; i < n.length; i++){
System.out.print(n[i]+" ");
}
System.out.println();
}
}
を実行すると、結果、「5 4 3 2 1」と表示されます。これは、整数型配列nの値n[0]からn[4]までが順次表示されたということを意味します。
n.lengthは、配列変数nの長さを意味します。この場合、5ですから、この処理は、iが1ずつ増えていき、最終的に4になるまで5回繰り返されることになります。
n[i]は、iが増えていくことにより、n[0]、n[1]、…、n[4]と変化していくわけです。
拡張for文
前述の通り、for文は配列と大変相性が良いという特徴が有ります。そのため、配列をより便利に使えるfor文として、拡張for文という特殊なfor文が用意されています。
拡張for文とはどのようなものかを説明する前に、ForSample2と同じ処理をするサンプルを、拡張for文で記述してみましょう。
public class ForSample4{
public static void main(String[] args) {
int n[] = { 5,4,3,2,1 };
// 整数型配列変数nの成分表示
for(int num : n){
System.out.print(num+" ");
}
System.out.println();
}
}
同じ処理をしているにもかかわらず、随分プログラムが簡素化されたことがわかります。
見て判るとおり、プログラムからは配列の添え字、および長さが取り除かれています。
for (データ型 変数名: 配列){
実行する文1;
実行する文2;
…
}
最初の説明したfor文とは、中がまったく別のものとなっています。
この形式では値を順に取り出したい配列と、取り出した値を格納する変数の二つをコロン(:)で区切って記述します。
繰り返される回数は配列に含まれている値の数だけなので条件式は必要ありませんし変化式も必要ありません。
配列の要素を一つ一つ取り出したい場合には、大変便利です。
ArrayListと拡張for文
ところで、この拡張for文が使えるのは、配列変数だけでは有りません。コレクションにも適用できるのです。例えば、以下のように、ArrayListを用いることも出来ます。
import java.util.*;
public class ForSample5{
public static void main(String args[]) {
//ArrayListデータの作成
ArrayListar = new ArrayList();
ar.add(5);
ar.add(4);
ar.add(5);
ar.add(2);
ar.add(1);
//拡張for文にて順次処理
for (intnum: ar) {
System.out.print(num+" ");
}
}
}
とすると、配列の場合と同じ結果が得られることがわかります。つまり、拡張for文の特徴は、配列とコレクションを全く区別しないで同じように用いることが出来るという点にあります。
最後に
このようにfor文は実に多様な使い方が出来ます。特に、拡張for文はJavaのご先祖様であるC言語にはもともとなかったループ処理で、コレクションを多く用いるJavaのプログラミングには非常に重宝します。
ただ、場合によっては普通のfor文を用いたり、whileやdo~whileを用いた方がよい倍亜も当然のことながら存在します。
どのような場面で何を使うかは、しっかり吟味しながらプログラミングをすることが大事です。
Javaが使える方は高単価な仕事ができる可能性があるので下記記事もぜひご覧くださいませ!
【関連記事】
▶Java案件のイマがわかる!知って見つかる最適案件