Javaで同じ動作を繰り返したいときにはfor文を使っていく。
プログラムを組むときに常に使う文法で、必ず覚えなければいけないものの一つだ。
このページではJavaでのfor文の使い方について初心者の方向けにわかりやすく解説した。参考にしていただければと思う。
目次
for文の基本
for文のような繰り返し文は次のようなときに使う。
コンビニに行き、残金が100円以上あったらおでんを買い続けるような処理だ。「残金が100円以上か」を判定し、あれば「おでんを買う」という繰り返しの処理になる。
こういった例だとwhileという文法の方が適しているが、要は繰り返しの処理にfor文やwhile文などの繰り返し文が使えるというのをまずは掴んでいただければと思う。
Javaのfor文の使い方
再確認にはなるが、Javaの繰り返し文のひとつが、「for文」だ。
for文が他の繰り返し文と異なっているのは、繰り返しのための初期化、条件、更新が書き方で明確にされている点だ。
また、初期化された値が繰り返しごとのどのように更新されるかも明確にする書き方になっている。書き方の基本はこうだ。
for (初期化; 条件式; 更新) {
文;
}
実際のコードは次のようになる。1から10までの数字を順番に表示するコードだ。
1 2 3 |
for (int number = 1; number <= 10; number++) { System.out.println(number + "回目"); } |
- 「int number = 1;」でnumberという変数を初期化している(numberに1を代入)
- 「number <= 10;」が条件だ
- 「number++」は1ループごとに1ずつ加える(更新する)ことを意味している
このように書くのがfor文だ。図で表すと次のようになる。
もう少し詳しくご説明しよう。
for文の繰り返し
for文による繰り返しがどのような順序で実行されていくのか、順を追ってみてみよう。最初に初期化が行われ、その後繰り返しとなる。
初期化
初期化のコードが最初に1回だけ実行される。基本的に、for文の中で使われる変数の初期化を行う。
- 複数の変数の宣言を書くことができる。
- 複数の初期化のための式を書くこともできる。式は、左から右に実行される。
- 初期化が必要でなければ、何も書かなくてもよい。
繰り返し
初期化コードが実行された後、ステップ1からステップ4までの繰り返しが開始される。
- ステップ1-式の評価:式がtrueであれば、ステップ2が実行される。式がない場合もステップ2が実行される。しかし、式がfalseならば、繰り返しは終わる。
- ステップ2-文の実行:文が実行される。この時、中断が起きれば繰り返しは終わる。
- ステップ3-更新:複数の更新のための式を書くことができる。この場合の式は、主に繰り返しの中で使われるカウンターなどの変数を更新する式である。式は、左から右に実行される。また、何も書かないこともできる。この場合は、何も更新されない。
- ステップ4-次の繰り返しを行う。つまり、ステップ1から繰り返す。
例として、for文で1から10までの数の合計を求めるコードを取り上げて、ステップごとに何が起きているかをみてみよう。
1 2 3 4 |
int sum = 0; for (int number = 1; number <= 10; number++) { sum += number; } |
最初は、sumが0で初期化される。その後からfor文が始まる。繰り返しの1回目だけ初期化が行われ、式の評価、文の実行、更新と続く。最後は繰り返しが11回目のとき、式のnumberが10を超えるので評価がfalseになり、繰り返しは終了する。
では、この点をサンプルプログラムで確認してみよう。
forを使って、1から10までの合計を求めるサンプルプログラム
このサンプルプログラムは1から10までの数の合計を求める実際のプログラムだ。
1 2 3 4 5 6 7 8 9 |
public class SumFromOneToTen { public static void main (String[] args){ int sum = 0;//[1] for (int number = 1; number <= 10; number++) {//[2] sum += number;//[3] } System.out.println("sum:" + sum);//[4] } } |
実行結果
1 |
[1] sum:55 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 変数sumを宣言し、0を代入する。
- [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントする。
- [3] sumにsum + numberを代入する。
- [4] sumを表示する。
初期化の値を変化させたサンプルプログラム
このサンプルプログラムは、numberに代入する初期化の値を1から3まで変化させたとき繰り返しはどのようになるかを示している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ForStatementChangingInitialization { public static void main (String[] args){ System.out.println("[1] 初期化:number = 1"); for(int number = 1;number <= 10;number ++){//[2] System.out.print("[2]-" + number + " "); } System.out.println("");//[3] System.out.println("[4]初期化:number = 2"); for(int number = 2 ;number <= 10;number ++){//[5] System.out.print("[5]-" + number + " "); } System.out.println("");//[6] System.out.println("[7] 初期化:number = 3"); for(int number = 3;number <= 10;number ++){//[8] System.out.print("[9]-" + number + " "); } System.out.println("");//[10] } } |
実行結果
1 2 3 4 5 6 |
[1] 初期化:number = 1 [2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8 [2]-9 [2]-10 [4] 初期化:number = 2 [5]-2 [5]-3 [5]-4 [5]-5 [5]-6 [5]-7 [5]-8 [5]-9 [5]-10 [7] 初期化:number = 3 [9]-3 [9]-4 [9]-5 [9]-6 [9]-7 [9]-8 [9]-9 [9]-10 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 初期化:number = 1を表示する。
- [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
- [3] 改行する。
- [4] 初期化:number = 2を表示する。
- [5] 変数numberを宣言し、初期値の2を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
- [6] 改行する。
- [7] 初期化:number = 3を表示する。
- [8][9] 変数numberを宣言し、初期値の3を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
- [10] 改行する。
式の値を変化させたサンプルプログラム
このサンプルプログラムは、numberの最大値を決める式の値を8から10まで変化させたとき、繰り返しはどのようになるかを示している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class ForStatementChangingExpression { public static void main (String[] args){ System.out.println("[1] 式:number <= 8"); for(int number = 1;number <= 8;number ++){//[2] System.out.print("[2]-" + number + " "); } System.out.println("");//[3] System.out.println("[4] 式:number <= 9"); for(int number = 1;number <= 9;number ++){//[5] System.out.print("[5]-" + number + " "); } System.out.println("");//[6] System.out.println("[7] 式:number <= 10"); for(int number = 1;number <= 10;number ++){//[8] System.out.print("[9]-" + number + " "); } } } |
実行結果
1 2 3 4 5 6 |
[1] 式:number <= 8 [2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8 [4] 式:number <= 9 [5]-1 [5]-2 [5]-3 [5]-4 [5]-5 [5]-6 [5]-7 [5]-8 [5]-9 [7] 式:number <= 10 [9]-1 [9]-2 [9]-3 [9]-4 [9]-5 [9]-6 [9]-7 [9]-8 [9]-9 [9]-10 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 式:number <= 8を表示する。
- [2] 変数numberを宣言し、初期値の1を代入する。numberを8になるまでインクリメントし、numberの表示を繰り返す。
- [3] 改行する。
- [4] 式:number <= 9を表示する。
- [5] 変数numberを宣言し、初期値の1を代入する。numberを9になるまでインクリメントし、numberの表示を繰り返す。
- [6] 改行する。
- [7] 式:number <= 10を表示する。
- [8][9] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントし、numberの表示を繰り返す。
- [10] 改行する。
更新の値を変化させたサンプルプログラム
このサンプルプログラムは、更新のnumberに加算する値を1から3まで変化させたとき繰り返しはどのようになるかを示している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ForStatementChangingUpdate { public static void main (String[] args){ System.out.println("[1] 更新:number += 1"); for(int number = 1;number <= 8;number += 1){//[2] System.out.print("[2]-" + number + " "); } System.out.println("");//[3] System.out.println("[4] 更新:number += 2"); for(int number = 1;number <= 8;number += 2){//[5] System.out.print("[5]-" + number + " "); } System.out.println("");//[6] System.out.println("[7] 更新:number += 3"); for(int number = 1;number <= 8;number += 3){//[8] System.out.print("[9]-" + number + " "); } System.out.println("");//[10] } } |
実行結果
1 2 3 4 5 6 |
[1] 更新:number += 1 [2]-1 [2]-2 [2]-3 [2]-4 [2]-5 [2]-6 [2]-7 [2]-8 [4] 更新:number += 2 [5]-1 [5]-3 [5]-5 [5]-7 [7] 更新:number += 3 [9]-1 [9]-4 [9]-7 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 更新:number += 1を表示する。
- [2] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで1ずつ増して、numberの表示を繰り返す。
- [3] 改行する。
- [4] 更新:number += 2を表示する。
- [5] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで2ずつ増して、numberの表示を繰り返す。
- [6] 改行する。
- [7] 更新:number += 3を表示する。
- [8][9] 変数numberを宣言し、初期値の1を代入する。numberを8になるまで3ずつ増して、numberの表示を繰り返す。
- [10] 改行する。
書き方の注意点
ブロックを用いない書き方
for文の繰り返しは、基本的にブロック内に書かれる。しかし、ブロックを用いないで、繰り返しの式を書くこともできるように設計されている。このため、次のコード1とコード2は同じになる。
コード1:ブロックを用いた書き方
1 2 3 |
for (int number = 1; number <= 10; number ++) { sum += number; } |
コード2:ブロックを用いない書き方
1 2 |
for (int number = 1; number <= 10; number ++) sum += number; |
しかし、ブロック内の文はすべて繰り返されるが、ブロックを用いない場合は最初の式しか繰り返されない。このため、コード3とコード4は同じにならない。
コード3:ブロックを用いた書き方
1 2 3 4 |
for (int number = 1; number <= 10; number ++) { sum1 += number; sum2 += number; } |
コード4:ブロックを用いない書き方
1 2 3 |
for (int number = 1; number <= 10; number ++) sum1 += number; sum2 += number; // この行はエラーになる。 |
無限ループ
初期化、式、更新に何も書かないでおくこともできる。そうすると、for文は無限ループになる。つまり、条件が何もないので無限に繰り返されることになる。無限ループの繰り返しを中断する方法は、「break」や「return」だ。これらについては後で学ぶ。
1 2 3 |
for ( ; ; ) { // 実行コードをここに書く } |
ブロックを用いない繰り返しのサンプルプログラム
このサンプルプログラムは、1から10までの数の合計を求めている。この時、ブロックを用いないで繰り返しのコードは書かれる。
1 2 3 4 5 6 7 8 |
publipublic class SumFromOneToTenWithoutBlock { public static void main (String[] args){ int sum = 0;//[1] for (int number = 1; number <= 10; number++) //[2] sum += number;//[3] System.out.println("sum:" + sum);//[4] } } |
実行結果
1 |
[1] sum:55 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 変数sumを宣言し、0を代入する。
- [2] 変数numberを宣言し、初期値の1を代入する。numberを10になるまでインクリメントする。
- [3] sumにsum + numberを代入する。
- [4] sumを表示する。
まとめ
このページではJavaのfor文の使い方について、必ず知っておきたい部分を中心にまとめてご紹介した。
必ず使う文法なので、実際に打ってプログラムを動かしてみていただければと思う。