「繰り返し処理の動きが分からない」
「for文とwhile文の使い分けは?」
こういった疑問に答えます。
✔︎この記事の内容
・繰り返し処理の動きを解説
・for文とwhile文の使い分け
私は、大学生の時にプログラミングを始め、現在、プログラミング経験が5年ほどです。
現在は、某大手IT企業でシステムエンジニアとして働いています。
繰り返し処理の動きを解説
繰り返し処理には、for文を用いた繰り返し処理と、while文を用いた繰り返し処理の2種類あります。
for文の挙動
基本的な構文は以下の通りです。
for(初期条件; 繰り返し条件; 更新条件){
処理
}
for文では、繰り返し条件を満たしている間、for文内の処理を実行します。
実際に具体例を見ながら説明していきましょう。
int i;
for(i=0; i < 2; i++){
System.out.println(i);
}
この例の場合、
初期条件:int i = 0
繰り返し条件:i < 2
更新条件:i++
となります。
以下が処理の流れになります。
繰り返し処理1回目
・i=0(初期条件)より、繰り返し条件(i<2)を満たしている
・処理System.out.println(i);が実行
・更新条件i++が実行され、iに1が加算される(i=1)
繰り返し処理2回目
・i=1より、繰り返し条件(i<2)を満たしている
・処理System.out.println(i);が実行
・更新条件i++が実行され、iに1が加算される(i=2)
繰り返し処理3回目
・i=2より、繰り返し条件(i<2)を満たさない
・繰り返し処理終了
更新条件は i++のように1ずつ加算する必要はなく、
i+=2のようにして2ずつ加算したりすることもできます。
while文の挙動
基本的な構文は以下の通りです。
while(繰り返し条件){
処理
}
while文では、繰り返し条件を満たしている間、while文内の処理を実行します。
ここでも、実際に具体例を見ていきましょう。
int sum = 1;
while(sum < 10){
sum *= 2;
}
以下が処理の流れになります。
繰り返し処理1回目
・sum=1より、繰り返し条件(sum<10)を満たしている
・処理sum*=2が実行され、sumが2倍になる(sum=2)
繰り返し処理2回目
・sum=2より、繰り返し条件(sum<10)を満たしている
・処理sum*=2が実行され、sumが2倍になる(sum=4)
繰り返し処理3回目
・sum=4より、繰り返し条件(sum<10)を満たしている
・処理sum*=2が実行され、sumが2倍になる(sum=8)
繰り返し処理4回目
・sum=8より、繰り返し条件(sum<10)を満たしている
・処理sum*=2が実行され、sumが2倍になる(sum=16)
繰り返し処理5回目
・sum=16より、繰り返し条件(sum<10)を満たしていない
・繰り返し処理終了
While文を用いる際は、無限ループしないように注意してください。
必ず繰り返し条件が成立しなくなるように、処理を記述しなければいけません。
例えば、上の例ではsumの値を増加させる処理を行っています。
しかし、sumの値を減らしていく処理をさせたらどうでしょう?
いつまでも繰り返し条件(sum < 10)を満たしてしまうため、処理が永遠に繰り返されます。
for文とwhile文の使い分け
for文とwhile文を使い分けるポイントは、繰り返し回数が分かっているか否かです。
for文:繰り返し回数が分かっている時
while文:繰り返し回数が分からない時
for文の場合には、繰り返し条件の他に、初期条件と更新条件を設定します。
そのため、for文内の処理とは関係なく繰り返し回数が決まります。
while文の場合は、繰り返し条件のみを設定します。
そのため、while文内の処理によって繰り返し回数が決まります。
ここで、問題です。
次のような場合はどちらを使った方が良いでしょう?
①ある数値を2倍していき、値が1000より大きくなるまで繰り返す。
②要素数30の配列の要素を全て3にする。
答えは、、、
①while文
②for文
です。
①は正直、for文でも書けますが、あまりプログラム的にきれいではありません。
②をwhile文で書こうとする場合、繰り返し条件が複雑になってしまいます。
例えば、「要素が全て3になった」という条件を簡潔に書けるでしょうか?
私は思いつきません。
実際の、①、②のプログラムは以下のようになります。
①2の2乗を繰り返し行い、値が1000より大きくなるまで2乗する
int n = 2;
while(n <= 1000){
n *= 2;
}
//for文で無理矢理書く場合(初期条件、更新条件が繰り返し条件に関係しない)
for(int i = 0; n <= 1000; i++){
n *= 2;
}
②要素数30の配列の要素を全て3にする
int[] num = new int[30];
for(int i = 0; i < num.length; i++){
num[i] = 3;
}
まとめ
for文とwhile文の使い分け
・for文:繰り返し回数が分かる時
・while文:繰り返し回数が分からない時
コメント