for 文の基本
5 回書くのをやめる
同じ処理を 5 回繰り返したいとき、素直に書くとこうなります。
Java
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);5 回ならまだ手が動きます。100 回になると破綻しますし、繰り返す回数が実行してみるまで決まらない場合はそもそも書けません。for 文を使うと、同じことが 3 行になります。
Java
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}5 行のうち変わっていたのは 1 か所だけでした。その変わる 1 か所を変数 i に持たせて、i を動かす手順を丸カッコの中に書いたのが for 文です。
カッコの中の 3 つは、動くタイミングが違う
丸カッコの中はセミコロンで 3 つに区切られています。カンマではありません。3 つは役割も、動く回数も違います。
| 式 | 例 | いつ動くか |
|---|---|---|
| 初期化 | int i = 1 | ループに入る前に 1 回だけ |
| 条件 | i <= 5 | 毎周、本体に入る前 |
| 更新 | i++ | 毎周、本体を実行したあと |
順に追うと、まず int i = 1 が動き、i <= 5 を確かめ、本体を実行し、i++ で i が 2 になり、また i <= 5 の確認に戻ります。i が 6 になったところで条件が成立しなくなり、本体を実行せずに抜けます。本体が動いた回数は 5 回で、i は最後に 6 になっています。
ループ変数の名前は慣習として i を使います。for の中だけで生きて消える変数なので、短い名前で困りません。
更新を書き間違えると止まらない
3 つのうち、いちばん怖いのは更新式です。
Java
for (int i = 1; i <= 5; i--) { // i が減り続けるi は 0 -1 -2 と減っていくだけなので、i <= 5 が成立しなくなる日は来ません。この演習の実行環境は 5 秒で強制終了してくれますが、手元や本番では CPU を食い続けます。
条件と更新の向きがそろっているか、書いた直後に「i は最後にいくつになるか」を口に出して確かめる癖をつけてください。
やってみよう
countUp(int n) を完成させて、1 から n までを半角スペース区切りでつないだ文字列を返してください。countUp(3) なら "1 2 3" です。
forでiを1からnまで動かす- ループの中で、結果を貯める変数に
iをつないでいく - 実行して
351の 3 件を通す
難しいのは末尾です。"1 2 3 " のように最後にスペースが残るとテストは落ちます。値が 3 個あっても、間の区切りは 2 か所しかありません。この 1 個の差をどう作るかが、この課題の考えどころです。
要件
- クラス名は
Solution、メソッド名はcountUp、引数はint n1 つ、戻り値の型はString - 繰り返し処理には必ず
for文を使うこと (whileや再帰ではなく) - 末尾に余分な空白を入れないこと (
"1 2 3"であり"1 2 3 "ではない)
入出力例
countUp(3) → "1 2 3"
countUp(5) → "1 2 3 4 5"
countUp(1) → "1"