初心者にとっての第一の壁、for文!
アルゴリズム作成には繰り返し処理が必須なのに!
実はfor文が難しいのには理由が2つあるのです。
(※当記事はJavaをベースに書いてありますが、C言語でもまったく同様ですので是非参考にして頂ければと思います。)
if文はいいんです。見たままわかるから。
条件が成立すればあっち、しなければelse。
見たとーりに動きます。
だけど、for文はそうはいかない。
「なんで動かないんですか!?」
「よくわからないんです!」
というご質問をいただくことが多々あります。
たしかにfor文はわかりにくい。
それはなぜか?
理由は2つ。
1つ目はfor文の構成の問題。
処理の順番がわかりにくいのです。
2つ目は状態変化。
for文は変数の内容が変化しながら処理が進むからなのです。
さあ、どうやって理解すればいいか?
いきなり分かろうとするのは無理です。
ここは一つずつ分解して見ていくことにしましょう。
for文の構成
for文の構成を改めて見ていきましょう。
for文はこの図のように4つの部分に分かれています。
それぞれ:
- ①初期化
- 初期化を行う。1度だけ実行される。
- ②条件式
- 繰り返しを継続する条件
- ③処理
- 処理本体
- ④更新
- 繰り返しの1ステップが終わったら行う処理
という構成になっています。初期化が最初だけ、というのがポイントですね!
で、次です!実行順序です!
実行順序、よく見てくださいね:
「①初期化」は一回だけ実行され、そのあとは
②条件式 → ③処理 → ④更新
が繰り返される。そして②条件式がfalse、つまり条件が成立しなくなるとfor文は終了します。
ここでのポイントは
②条件式 → ③処理 → ④更新
がワンサイクルになっていること。
そして、「②条件式」の次が「③処理」で、最後に「④更新」が実行されることなのです。
だから例えば:
for(int i = 1; i <= 10; i++) { System.out.println(i); }
のコードで最初に表示されるのは「1」となり「2」ではない。
「i++」の部分は最後に。
最初に「i <= 10」の条件判断、次に「System.out.println(i);」が実行され、そのあとで「i++」が実行されます。
これがfor文の実行順序なのです。
状態変化
それでは2つ目の難しさのポイント、状態変化を追っかけていきましょう!
サンプルとして、1~10までを合計するプログラムを考えたいと思います:
public static void main(String[] args) { int sum = 0; for(int i = 1; i <= 10; i++) { sum = sum + i; } System.out.println(sum); }
実行結果:
55
このプログラムで状態変化するものは2つ、
変数sumとiです。
ここからプログラムの実行状況を順を追って見ていきます。
まずプログラムの序盤、「int sum = 0;」 でsumは0に、
for文の「①初期化」部の「int i = 0;」でiは0になっています。
それ以降は「②条件式」→「③処理」→「④更新」の繰り返し。
これを表にすると:
回数 | ②条件式:i <= 10 | ③処理:sum = sum + i | ④更新:i++ |
---|---|---|---|
1 | (1 <= 10) → true | (sum = 0 + 1) → sum = 1 | (i = 1 + 1) → i=2 |
2 | (2 <= 10) → true | (sum = 1 + 2) → sum = 3 | (i = 2 + 1) → i=3 |
3 | (3 <= 10) → true | (sum = 3 + 3) → sum = 6 | (i = 3 + 1) → i=4 |
4 | (4 <= 10) → true | (sum = 6 + 4) → sum = 10 | (i = 4 + 1) → i=5 |
5 | (5 <= 10) → true | (sum = 10 + 5) → sum = 15 | (i = 5 + 1) → i=6 |
6 | (6 <= 10) → true | (sum = 15 + 6) → sum = 21 | (i = 6 + 1) → i=7 |
7 | (7 <= 10) → true | (sum = 21 + 7) → sum = 28 | (i = 7 + 1) → i=8 |
8 | (8 <= 10) → true | (sum = 28 + 8) → sum = 36 | (i = 8 + 1) → i=9 |
9 | (9 <= 10) → true | (sum = 36 + 9) → sum = 45 | (i = 9 + 1) → i=10 |
10 | (10 <= 10) → true | (sum = 45 + 10) → sum = 55 | (i = 10 + 1) → i=11 |
11 | (11 <= 10) → false | (実行されない) → sum = 55(変化なし) | (実行されない) → 11(変化なし) |
結果、11回目でi=11になっていて、「②条件式」はfalseになるので、forの処理が終わります。
この時点でsum=55になっており、これが求める結果となります。
まとめ
for文の難しさはforの構成と状態変化にありました。
forをマスターするにはまず構成をしっかり把握すること。
「①初期化」が一回実行された後は
「②条件式」→「③処理」→「④更新」の繰り返し。
そして、この中で変数の状態が変化していきます。
この基本が分かっていればコードを作成したり、また他人のコードを読むことができるでしょう。
頑張ってマスターしてくださいね!
とってもわかりやすいです!
勉強はじめて1週間ですが
for難しくてぐぐったら辿り着きました。
コメントありがとうございます!
プログラミング言語初心者の方にとって条件文はわかりやすいですが繰り返し構文はわかりにくいというのを業務を通して見てきたのでこういう記事を作成しました。
お役に立てれば幸いです