こんにちはペンすけです!
Javaを初めて数日。プログラミングの基本構造である 繰り返し処理 を勉強しました!
繰り返し処理は、for文、while文、do while文などなど、 色々挙げられます!
色々あるけど、どれを使うのがいいんだろう…???
今回は、 繰り返し処理のfor, while, do whileの使い分け について整理していきます!
繰り返し処理が必要になる場面!
たとえばこんなとき…
1から100までの総和を求めたいな~
覚えたてのJavaを書いてみよう!
int sum = 1 + 2 + 3 + ....(略) ... + 99 + 100;
(10分後) よし書けた!
けど…めっちゃ時間かかった!!!
1から100の総和を求めるように、 同じような処理が何度も必要になる場合 、繰り返し処理の出番となります!言い換えれば、
単純に書こうとしたら時間がかかる処理
を繰り返し処理を使って書いていきます!
また、この同じような処理を何度も繰り返す数というのが、for文なのかwhile文なのか、はたまたdo while文なのか、使い分けるポイントになります!
for, while, do whileの基本的な使い方
3つの繰り返し処理の書き方は、こちらのソースコードを見てください!
/*
* 繰り返し処理の検証
* 1~100の整数の和を計算するプログラム
*/
/* 1. for文 */
int sum_for = 0;
for(int i=1; i<=100; ++i){
sum_for += i;
}
System.out.println("for文の結果: " + sum_for);
/* 2. while文 */
int sum_while = 0;
int k = 1;
while(k <= 100){
sum_while += k;
k++;
}
System.out.println("while文の結果: " + sum_while);
/* 3. do while文 */
int sum_doWhile = 0;
int l = 1;
do{
sum_doWhile += l;
l++;
} while(l <= 100);
System.out.println("do while文の結果: " + sum_doWhile);
繰り返す回数が決まっているならfor文!
迷ったらfor文!
になりがちですが、それぞれの特徴を抑えた上で使用すると効率的に書くことができます。
処理数 → | 最小繰り返し数 | 最大繰り返し数 |
---|---|---|
for文 | 0回 | 指定する |
while文 | 0回 | 指定しない |
do while文 | 1回 | 指定しない |
1~Nまで足す → for文
繰り返す処理が決まっているため、for文を使うのが良いでしょう!
int sum = 0;
// 1~Nの総和を求める(N回計算)
for(int num=1; num<=N; ++num){
sum += num;
}
数を1/2にしていく → while文
繰り返す処理が明確に定まっていないときにはwhile文がおすすめ!
int num = N;
// numを2で割り続ける
while(num != 1){
num /= 2;
}
厳密には、$(\log_2 N$)回の繰り返し処理となります。
今回に限らず、繰り返し回数を気にせずに処理をすることができるのがwhile文の使いどころになります。
Nが2以上なのが確定しているとき → do while文
必ず1回は処理される場合はdo while文!
int num = N;
// numを2で割り続ける
do {
num /= 2;
} while(num != 1);
競技プロの問題も解けちゃう!?
競技と言えど、実は簡単な問題もある!
競技プログラミングコンテスト(通称:競プロ)は、プログラミング力を競う世界大会です。
毎週土曜日の21時から行われています。
そんなガチ勢の競プロの問題に、ここまでの繰り返し処理を使って解ける問題があるのです!
問題文を読むとやや複雑に思えますが、簡単に言い換えてしまえば、
5つの整数 (x1, x2, x3, x4, x5) のうち、0である数が左から何番目なのか、その番号を出力する。
という処理を実現すれば良いということになります。
個別の処理を考える → for文でまとめる
「for文を使って何かしよう…」と考えると難しくなってしまいます。
まずは、 個別の処理を考え、その後にfor文でまとめる ようにしましょう!!!
ペンすけがJavaを使って実装したプログラムは、以下のリンクから参照可能です!
繰り返し処理 まとめ
とりあえずはfor文を使って考えてみよう!
もし繰り返し処理数が分からない場合は、while文も検討してみて!
処理数 → | 最小繰り返し数 | 最大繰り返し数 |
---|---|---|
for文 | 0回 | 指定する |
while文 | 0回 | 指定しない |
do while文 | 1回 | 指定しない |
コメント