学ぶ › JavaScript
制御フロー · 06
繰り返し
同じことを何度も:for と while。
繰り返しは同じコードを何回も実行します。
下の例は 1 から n までの数を一つずつ表示しながら足し、最後に合計を表示します。
n = int(input())total = 0for i in range(1, n + 1): print(i) total += iprint(total)const n = Number(require("fs").readFileSync(0, "utf8"));let total = 0;for (let i = 1; i <= n; i++) { console.log(i); total += i;}console.log(total);import { readFileSync } from "node:fs";const n: number = Number(readFileSync(0, "utf8"));let total: number = 0;for (let i = 1; i <= n; i++) { console.log(i); total += i;}console.log(total);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); }}using System; class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); int total = 0; for (int i = 1; i <= n; i++) { Console.WriteLine(i); total += i; } Console.WriteLine(total); }}#include <iostream> int main() { int n, total = 0; std::cin >> n; for (int i = 1; i <= n; i++) { std::cout << i << '\n'; total += i; } std::cout << total << '\n';}#include <stdio.h> int main(void) { int n, total = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { printf("%d\n", i); total += i; } printf("%d\n", total); return 0;}n = コンソール.行読み().数に();total = 0;繰り返す (i = 1; i <= n; i++){ コンソール.書く(i); total += i;}コンソール.書く(total);5
1 2 3 4 5 15
ポイント
- いちばんよくある形は「1 から n まで」です。
始まりの値、続ける条件、1周ごとに変わる量を決めます。 - 繰り返しながら値を集める累積(
total += i)は、合計・個数・最大値の問題の基本です。 - リストや文字列を一つずつたどるときは、番号なしで値をそのまま取り出す短い形があります。
- while は条件だけを見て、条件が真のあいだ回り続けます。
breakは繰り返しを抜け、continueはこの周だけ飛ばします。
どちらもいちばん内側の繰り返し一つにだけ効くので、二重ループを一度に抜けるには目印の変数を置くか、関数からreturnします。
言語ごとの書き方
| Python | for i in range(1, n + 1): — range の終わりの値は含みません。間隔は range(10, 0, -2)、一つずつは for x in nums:、条件は while 条件:。do-while はありません |
|---|---|
| JavaScript | for (let i = 1; i <= n; i++)、間隔は i -= 2。一つずつは for (const x of nums)。while (条件) { }、do { } while (条件);。外側まで抜けるにはラベル break outer; |
| TypeScript | JavaScript と同じです |
| Java | for (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 |
| C | for (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++)を本体に必ず入れます。
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) でたどります。
繰り返しのあとで i を使ったJava · C# · C · C++ · JavaScript · TypeScript · Craykon
for (int i = 0; i < 3; i++) { }
printf("%d\n", i);→ エラー — for で作った i は繰り返しの中にしかありません
あとでも使うなら、繰り返しの前で作ります。
Python の i は繰り返しのあとも最後の値で残ります。
言語ごとの違い
Python の
C 系と Craykon も
一つずれで答えを間違えるのが、繰り返しでいちばん多いミスです。
Python の
range(a, b) は b を含まないので、1 から n までは range(1, n + 1) です。C 系と Craykon も
i <= n か i < n かをもう一度確かめましょう。一つずれで答えを間違えるのが、繰り返しでいちばん多いミスです。