Javaの代表的な反復処理にはfor文とwhile文があります。
反復処理はループ処理とも表現されます。
今回はループ処理の一つであるforの文法や特徴について解説します。
反復処理はプログラム(計画)を組むときに同じような処理が繰り返されるときに利用します。
forもwhileも基本的に条件を元に繰り返し(以下、ループ)を行います。
もくじ
forの文法
forはwhileと違い条件を作る際には、カウンター(カウンタ変数)と呼ばれる変数と組み合わせます。その条件に合致する(true)の時にループ処理が行われます。
カウンターは特別な変数ではなく、変数内部の数値をカウントアップやカウントダウンさせる為、カウンターと名前を付けているだけです。
※変数はカウントアップやカウントダウンする変数でなくてもforは利用できます。
変数をカウントアップもしくはダウンさせるために、初期化の式で変数を初期化(および作成)し、増減式で変数内のデータを増減させます。
処理はforブロックである{}内に記述します。
ブロックを記述しない方法もあり、その際は1行のみがforの適用範囲になります。
forの文法 (ブロック記述) |
for(初期化の式 ; 条件 ; 増減式 ){
繰り返したい処理 ; } |
---|---|
記述例 | for(int i = 0; i < 10; i++){
System.out.println(i + “を表示”); } |
forの文法 | for(初期化の式 ; 条件 ; 増減式) 繰り返したい処理 ; |
記述例 | for(int i = 0; i < 10; i++)
System.out.println(i + “を表示”); |
記述例ではiのデータを10回表示させる処理になっています。
forの動作の流れ
forはループ処理を行う為に複数の部品を利用します。また、動作の仕方も少し特殊です。
for文法の詳細
- 初期化の式
- 条件
- 増減式
上記の説明の重複になりますが、この3つを利用して変数をカウント(アップおよびダウン)していくのがforの基本です。
※あくまで基本ですので、複雑なプログラムになるとこの限りではありません
それぞれは以下のような役割を持っています。
部品の名称 | 役割 |
---|---|
初期化の式 | 変数を初期化する(定義も同時に行える) |
条件 | 繰り返しを行う条件を設定する |
増減式 | 変数内のデータを増減させる |
forの動作詳細
以下はforを参考プログラムとforの構文の各部品に番号を振った図です。
※番号は動作の順序ではありません。
動作順序 | 動作 | 記述例での動き |
---|---|---|
1 | ①初期化の式を実行する | 変数iを宣言し、0で初期化される |
2 | ②条件を確認する trueであれば④を実行 falseであればforは終了 |
条件はi < 3 iは0のため、trueとなり④を実行 |
3 | ④繰り返す処理を実行する | System.out.println()で表示処理が実行される iは0のため、表示は”0を表示”となる |
4 | ③増減式を実行する | iがインクリメントされ1となる |
5 | ②条件を確認する trueであれば④を実行 falseであればforは終了 |
条件はi < 3 iは1のため、trueとなり④を実行 |
6 | ④繰り返す処理を実行する | System.out.println()で表示処理が実行される iは1のため、表示は”1を表示”となる |
7 | ③増減式を実行する | iがインクリメントされ2となる |
8 | ②条件を確認する trueであれば④を実行 falseであればforは終了 |
条件はi < 3 iは2のため、trueとなり④を実行 |
9 | ④繰り返す処理を実行する | System.out.println()で表示処理が実行される iは1のため、表示は”2を表示”となる |
10 | ③増減式を実行する | iがインクリメントされ3となる |
11 | ②条件を確認する trueであれば④を実行 falseであればforは終了 |
条件はi < 3 iは3のため、falseとなりforは終了となる |
下の図解の番号は上の表と対応しています
まとめると以下のようになります。
初期化の式→条件→処理→増減式→条件→処理→増減式→条件…
初期化の式はforで一回のみ実行されます。
次に、条件にあてはまれば処理を行った後に増減式を実行します。
そして、また条件を確認して[処理と増減式]を行うかどうかを決定する、といった手順を踏んでループ処理を行います。
for文 サンプルプログラム
以下のプログラムを「Number16.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 8 |
class Number16{ public static void main(String[] args){ //6の段を表示するfor文 for(int i = 1; i < 10; i++){ System.out.println(6 + "x" + i + "=" + (i * 6)); } } } |
実行例
c:\work>javac Number16.java
C:\work>java Number16
6×1=6
6×2=12
6×3=18
6×4=24
6×5=30
6×6=36
6×7=42
6×8=48
6×9=54
※実行例はコンパイルから実行までの例を表示しています。
Number16.javaの補足説明
以下は「Number16.java」のfor文
for(int i = 1; i < 10; i++){
System.out.println(6 + “x” + i + “=” + (i * 6));
}
初期化の式で変数iを1で初期化します。
次に、条件を確認して「i(1) < 10」となる為、繰り返しの処理が行われます。
以下は表示処理の部分の詳細です。(表示をクリックすると詳細説明が表示されます)
「6 + “x” + 1 + “=” + (1 * 6)」→「6 + “x” + 1 + “=” + 6」
「“6x” + 1 + “=” + 6」→「“6×1”+ “=” + 6」
「“6×1”+ “=” + 6」→「“6×1=” + 6」
「“6×1=” + 6」→「“6×1=6”」
繰り返す処理が終わった後、増減式で「iがインクリメントされ2」に増えます。
再度、条件を確認して「i(2) < 10」となり、繰り返しの処理が行われます。
繰り返す処理→増減式→条件…という順番でiが10になるまでループが行われます。
(増減式でiが10まで増え、条件が「i(10) < 10」になった段階でfalseとなりループ終了)
for文 復習問題
- forは○処理に利用される構文である。○に入る語句を選んでください。
- 解答群
- 分岐
- 反復
- 順次
- 逐次
- forの増減式に記述する演算として適切なものを選んでください。
- 解答群
- インクリメント演算
- 関係演算
- 算術演算
- 論理演算
- forの条件に記述する演算として適切なものを選んでください。
- 解答群
- インクリメント演算
- 関係演算
- 算術演算
- デクリメント演算
- 数字を0から10まで表示したい。次のプログラムの□に入る記述を選んでください。
for(int i = 0 ; □ ; i++) System.out.println(i); - 解答群
- i < 10
- i <= 9
- i < 11
- i <= 11
- 数字を1から10まで表示したい。次のプログラムの□に入る記述を選んでください。
for( □ ; i++) System.out.println(i); - 解答群
- int i = 0; i <= 10
- int i = 0; i <= 11
- int i = 1; i <= 10
- int i = 1; i <= 11
- 数字を10から1まで表示したい。次のプログラムの□に入る記述を選んでください。
for( □ ) System.out.println(i); - 解答群
int i = 10; i > 0 ; i--
int i = 10; i > 1 ; i--
int i = 10; i > 10 ; i--
int i = 10; i < 10 ; i--
- 1、3、5、7..という数字を表示させたい。次のプログラムの□に入る記述を選んでください。
for(int i = 1 ; i < 100 ; □) System.out.println(i); - 解答群
i++
i--
i + 2
i += 2
- お疲れ様でした。
まとめ
- forは反復処理を行う際にカウンタ変数を利用することが多い
- 構文には「初期化の式」「条件」「増減式」という部分がある
- 条件に合致する際に反復処理を行う
- カウンタ変数を利用する際は、値を増減させて条件に利用する