{ }codelper

学ぶ › Java

制御フロー · 06

繰り返し

同じことを何度も:for と while。

繰り返しは同じコードを何回も実行します。
下の例は 1 から n までの数を一つずつ表示しながら足し、最後に合計を表示します。

import java.util.Scanner; public class Main {    public static void main(String[] args) {        int n = new Scanner(System.in).nextInt();        int total = 0;        for (int i = 1; i <= n; i++) {            System.out.println(i);            total += i;        }        System.out.println(total);    }}
stdin
5
stdout
1
2
3
4
5
15

ポイント

  • いちばんよくある形は「1 から n まで」です。
    始まりの値、続ける条件、1周ごとに変わる量を決めます。
  • 繰り返しながら値を集める累積(total += i)は、合計・個数・最大値の問題の基本です。
  • リストや文字列を一つずつたどるときは、番号なしで値をそのまま取り出す短い形があります。
  • while は条件だけを見て、条件が真のあいだ回り続けます。
  • break は繰り返しを抜け、continue はこの周だけ飛ばします。
    どちらもいちばん内側の繰り返し一つにだけ効くので、二重ループを一度に抜けるには目印の変数を置くか、関数から return します。

言語ごとの書き方

Pythonfor i in range(1, n + 1): — range の終わりの値は含みません。
間隔は range(10, 0, -2)、一つずつは for x in nums:、条件は while 条件:。
do-while はありません
JavaScriptfor (let i = 1; i <= n; i++)、間隔は i -= 2。
一つずつは for (const x of nums)。
while (条件) { }、do { } while (条件);。
外側まで抜けるにはラベル break outer;
TypeScriptJavaScript と同じです
Javafor (int i = 1; i <= n; i++)、一つずつは for (int x : nums)。
while、do { } while。
ラベル break outer; も使えます
C#for (int i = 1; i <= n; i++)、一つずつは foreach (var x in nums)。
while、do { } while
C++for (int i = 1; i <= n; i++)、一つずつは for (int x : nums)。
while、do { } while
Cfor (int i = 1; i <= n; i++) — 値を一つずつ取り出す形がないので、番号で回します。
while、do { } while
Craykon繰り返す (i = 1; i <= n; i++)、一つずつは それぞれ (x の中 nums)、条件は 間 (条件) { }。
抜けるのは 抜ける、飛ばすのは 次へ。
do-while はありません。
間 はシーン(アニメーション)では1周ごとに1フレーム休みますが、コンソールの解答では休まずに回ります

よくある間違い

while で条件を変えなかった

i = 1
while i <= 5:
    print(i)

→ 終わりません。1 を延々と表示します

条件を変える行(i += 1、i++)を本体に必ず入れます。

繰り返しのあとで i を使ったJava · C# · C · C++ · JavaScript · TypeScript · Craykon

for (int i = 0; i < 3; i++) { }
printf("%d\n", i);

→ エラー — for で作った i は繰り返しの中にしかありません

あとでも使うなら、繰り返しの前で作ります。
Python の i は繰り返しのあとも最後の値で残ります。

for … in で値をたどったJavaScript · TypeScript

const nums = [10, 20];
for (const x in nums) console.log(x);

→ 0、1 — 値ではなく番号です(しかも文字列 "0"、"1")

値は for (const x of nums) でたどります。

言語ごとの違い
Python の range(a, b) は b を含まないので、1 から n までは range(1, n + 1) です。
C 系と Craykon も i <= n か i < n かをもう一度確かめましょう。
一つずれで答えを間違えるのが、繰り返しでいちばん多いミスです。

練習問題