みなさんこんにちは。こんばんは。
Numata です。
今回は、for文の使い方について詳しく説明していきます。
完全未経験者向けの記事になります。
独学でJavaを学んでいて理解が難しかったり、
研修でJavaを学んでいるが、講師の説明がよくわからなかったり、
研修中にこっそり復習したり、、
と、for文の仕組みについて正確に理解できていない方向けに
イチから詳しく説明します!
それではいきましょう!
もくじ
for文は(変数宣言;変数の範囲指定;後処理)という構成でできています
改めてfor文を見てみましょう。
1 2 3 4 5 |
for(int i = 0; i < 10; i++) { System.out.println(i + "周目です"); } |
このfor文を分解すると、3ブロックに分けられます。
①:for
②:(int i = 0; i < 10; i++)
③:{System.out.println(i + “周目です”);}
それぞれのブロックの役割です。
①:for文宣言
②:for文を繰り返す回数の指定、後処理の指定
③:繰り返される処理
まずは、3つのブロックに分かれて見えるようになりましたか?
それぞれのブロックではこんなことをしています。
①:ここからfor文が始まりますよという宣言。そもそもこれがないとfor文は始まりません!
②:for文を繰り返す条件の指定+1周処理を行った後に行う後処理。
for文には、後処理という概念が存在します。
後処理とは、1周分の処理が終わった後に行う処理です。
③ブロックの処理が終わった後に、必ず実行される処理のことです。
③:②ブロックで繰り返すことが決定したときに行われる処理です。
それぞれのブロックの役割が見えてきましたハズです。
3つのブロックをうまく組み合わせてfor文は成り立っています。
①・③ブロックは、説明の必要がないかと思います。
苦戦するのは②ブロックですよね。
②ブロックのみに焦点を当てると、
(int i = 0; i < 10; i++)となっています。
②ブロックもセミコロン(;)区切りで3ブロックに分かれていますね。
(Ⅰ. 変数宣言;Ⅱ. 変数の範囲指定;Ⅲ. 後処理)
となっています。
これらが一体何をしているのかが理解できればfor文はあっという間に
使いこなせるようになります。
それでは②ブロックの解説をしていきます!
Ⅰ. 変数宣言
for文では、変数を使って、繰り返す回数を指定します。
変数を用いて、その変数の範囲を指定することで、繰り返す回数を決定しているのです。
指定できる変数は2種類あります。
①for文が出現するまでにすでに宣言されている変数
②for文の( ; ; )内、最初のブロックで宣言された変数
例プログラムを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//for文のⅠブロックで変数宣言している for(int i = 0; i < 10; i++) { System.out.println(i + "周目です"); } int a = 0; //すでに宣言されている変数aを用いているため、Ⅰブロックは空 for(; a < 10; a++) { System.out.println(a + "周目です"); } |
一つ目のfor文では、Ⅰブロックで変数宣言を行い、
その変数 i を用いて繰り返す回数を指定しています。
二つ目のfor文では、for文が記述される前に、変数 a が宣言されています。
この a を用いて繰り返す回数を指定しているため、Ⅰブロックは空になっています。
Ⅰブロックでは、for文を繰り返す範囲を指定するための変数を
宣言することができます!
ちなみに、変数宣言をする際には、
基本的にint型、変数名は i・k・j の順で使われます。
Ⅱ. 変数の範囲指定
繰り返すには、終了条件を決めなくてはなりません。
終了条件がない繰り返し文は無限ループとなり、
プログラムが永遠に終わらなくなってしまうという不具合が発生してしまいます。
終了条件==変数の範囲の指定です。
変数がこの範囲の間、繰り返してねと設定するのです。
(つまり、ここで使われる変数は、処理・後処理で値が変更される必要があります。)
下記プログラムでは、i が10未満の間繰り返すよう設定してあります。
1 2 3 4 5 |
for(int i = 0; i < 10; i++) { System.out.println(i + "周目です"); } |
i の値が10未満である限りずっと繰り返されるというわけです。
変数の範囲を指定するために変数を使うこともできます。
1 2 3 4 5 6 7 8 |
int[] array = new int[5]; //繰り返す範囲の指定に変数を使うこともできる for(int i = 0; i < array.length; i++) { array[i] = i; } |
範囲指定をするときに重要なことは、比較式になっていることです。
(比較式:式の結果がboolean型で表現される式、比較演算子を利用)
for文は比較式がtrueの時、繰り返されます。
上記プログラムの場合、
1周目の比較式は0 < 5 となります。
この式の結果はtrueのため、処理に移ります。
6週目の比較式は 5 < 5 となります。
この式の結果はfalseのため、処理に移らず、for文は終了するというわけです。
範囲指定は、処理・後処理で値が変化する変数を利用しましょう!
範囲指定の式は比較式を使いましょう!
結果がtrueの時、繰り返されます!
Ⅲ. 後処理
最後のブロックです。
このブロックは前述の2ブロックとは別の働きをします。
ここで記述するのは、処理が行われた後に行う処理です。
for文は、変数が指定された範囲内の時、{}で囲まれている処理を行います。
そして、{}内の処理が終わった後、後処理としてⅢブロックに記述してある処理が実行されます。
1 2 3 4 5 6 |
//~周目です と出力した後、i++(iをプラス1する)を実行している for(int i = 0; i < 10; i++) { System.out.println(i + "周目です"); } |
後処理にはよくインクリメント・デクリメント(++・–)が使われます。
範囲指定斗1ずつプラス・マイナスすることを組み合わせることで、
狙った通りの繰り返し処理を指定することができます。
ちなみに、後処理はカンマ(,)区切りで復習記述することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//複数の後処理 for(int i = 0; i < 10; i++,System.out.println("後処理")) { System.out.println(i + "周目です"); } 【出力結果】 0周目です 後処理 1周目です 後処理 2周目です 後処理 3周目です 後処理 4周目です 後処理 5周目です 後処理 6周目です 後処理 7周目です 後処理 8周目です 後処理 9周目です 後処理 |
複数の後処理を使うことはあまりありませんが、覚えておいて損はないでしょう。
後処理は、{}内の処理が終わると必ず実行されます!
最後の週の繰り返しが終わった後も実行されるので注意しましょう!
for文はとてもよく使われます!
for文はとてもよくつかわれます。
繰り返し処理にはもう一つ、while文があります。
それぞれの使いどころは、以下を目安にするとよいでしょう。
for :繰り返したい回数が具体的に決まっているとき
(ex. 10回繰り返したい、配列の要素数分繰り返したい)
while :終了条件のみが決まっているとき
(ex. 変数numが10を超えるまで、変数numがマイナスになるまで)
for文は、具体的に回す回数が決まっているときによく使われます。
理由は、宣言の段階で何回繰り返すのか明確に決められるからです。
for文の特徴は、繰り返す回数を指定するだけの変数を作れるという点です。
int i =0; は、for文を繰り返す回数を指定するための変数です。
上手に利用して、for文マスターになりましょう!
以上です。ご覧いただきありがとうございました。
コメント