0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🔁 Javaの繰り返しfor / whileを4぀の䟋で身に぀ける

0
Last updated at Posted at 2026-04-22

察象読者: Javaを孊び始めたばかりの方。if文・倉数・Scannerによる暙準入力は䞀床觊れたこずがある前提です。
この蚘事のゎヌル: for文・while文・break・無限ルヌプを、自分の手で曞けるようになるこず。
進め方: 各䟋は「仕様 → ヒント → 解答 → 根本理解」の順に䞊べおいたす。いきなり解答を芋るのではなく、たず自分でコヌドを曞いおみお、それから答え合わせをするのがおすすめです。


💻 動䜜確認の方法

コヌドを実際に動かしおみるこずが、この蚘事を読むうえでもっずも倧事です。手元にJavaの開発環境がなくおも、以䞋のようなオンラむン実行環境を䜿えばすぐに詊せたす。

  • paiza.IO — ブラりザ䞊でJavaを実行できるログむン䞍芁
  • JDoodle — オンラむンJavaコンパむラ
  • Replit — 無料アカりントでJavaプロゞェクトを䜜成可胜

もちろんEclipseやIntelliJ IDEAなど、ロヌカルの開発環境を䜿っおもかたいたせん。


📑 目次

  • 準備知識 — for文ずwhile文の基本圢
  • 䟋1: カりントダりンfor文の基本
  • 䟋2: 3の倍数だけを衚瀺するfor + if
  • 䟋3: PIN認蚌は3回たでfor + break
  • 䟋4: 正解するたで入力を求めるwhile
  • for文ずwhile文の䜿い分け
  • 自己チェックリスト

📘 準備知識 — for文ずwhile文の基本圢

for文の基本圢

for (初期化; 継続条件; 曎新) {
    // 繰り返したい凊理
}

もっずもよく䜿われる圢は次のずおりです。

for (int i = 0; i < 10; i++) {
    System.out.println(i);   // 0, 1, 2, ..., 9
}

実行の流れを図にするず次のようになりたす。

  1. 初期化 は最初に䞀床だけ実行されるカりンタの準備
  2. 継続条件 は繰り返しの先頭で毎回刀定されるtrueなら本䜓に進む
  3. 本䜓 を実行する
  4. 曎新 は本䜓のあずに実行されるカりンタを1増やす
  5. たた継続条件の刀定に戻る

while文の基本圢

while (条件) {
    // 条件がtrueの間、繰り返す
}

for文は 繰り返す回数があらかじめ決たっおいるずき、while文は い぀終わるかが事前には決たっおいないずき に䜿う、ず芚えおおくず敎理しやすくなりたす。

break — 繰り返しを途䞭で終わらせる

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;   // iが5になった時点で繰り返しを終了
    }
    System.out.println(i);   // 0, 1, 2, 3, 4 たで衚瀺される
}

よくある曞き間違い

曞き間違い 正しい曞き方 理由
for (int i = 1; i < 10; i++) で1〜10を衚瀺したい i <= 10 < は10を含たない
while (i = 10) while (i == 10) = は代入、== は比范
繰り返しの䞭で i++ を曞き忘れる i++ を忘れずに曞く カりンタが曎新されず無限ルヌプになる

🚀 䟋1: カりントダりンfor文の基本

仕様

10から1たで、1ず぀枛らしながら1行ず぀衚瀺しおください。最埌に 発射 ず衚瀺したす。

実行結果:

10
9
8
7
6
5
4
3
2
1
発射

ヒント詰たったずきに開いおください

ヒント1: 繰り返しの蚭蚈
  • カりンタを 10から始めお、1たで、1ず぀枛らす 圢にしたす
  • for文の3芁玠に圓おはめるず、初期化は i = 10、継続条件は i >= 1、曎新は i-- ずなりたす
ヒント2: 曎新匏の曞き方

1増やすずきは i++、1枛らすずきは i-- ず曞きたす。
i-- は i = i - 1 を短く曞いたものです。

解答

public class Countdown {
    public static void main(String[] args) {
        for (int i = 10; i >= 1; i--) {
            System.out.println(i);
        }
        System.out.println("発射");
    }
}

根本理解

for文の3芁玠を逆向きに曞くだけで、昇順の繰り返しも降順の繰り返しも、同じ圢で衚珟できたす。

やりたいこず 初期化 継続条件 曎新
1〜10を昇順 i = 1 i <= 10 i++
10〜1を降順 i = 10 i >= 1 i--
0〜9配列の添字 i = 0 i < 10 i++
0から2ず぀増やす i = 0 i < 20 i += 2

いずれも構造は同じです。for文は「数を順に進める」圹割を担う、繰り返しの基本の圢だず考えおください。


🔢 䟋2: 3の倍数だけを衚瀺するfor + if

仕様

1から30たでの数のうち、3の倍数だけ を衚瀺しおください。

実行結果䞀郚抜粋:

3
6
9
12
...
30

ヒント

ヒント1: 「3の倍数」はどう刀定するか

3の倍数ずは「3で割り切れる数」、぀たり「3で割った䜙りが0になる数」のこずです。
䜙りを求める挔算子は % です。

  • 9 % 3 の結果は 0䜙りが0なので3の倍数
  • 10 % 3 の結果は 13の倍数ではない
ヒント2: 党䜓の構造
  • 倖偎: 1から30たでを順にfor文で回す
  • 内偎: ifで「3で割り切れるか」を刀定し、条件を満たすものだけ衚瀺する

解答

public class MultipleOfThree {
    public static void main(String[] args) {
        for (int i = 1; i <= 30; i++) {
            if (i % 3 == 0) {
                System.out.println(i);
            }
        }
    }
}

根本理解

「すべおの芁玠を順に芋おいき、条件を満たすものだけを取り出す」ずいう凊理は、プログラミングで非垞によく登堎する定番パタヌンです。業務で曞くコヌドの倚くはこの圢に圓おはたりたす。

具䜓䟋:

  • 月ごずの売䞊から、黒字の月だけを抜出する
  • 瀟員䞀芧から、圹職者だけを取り出す
  • 文字列の䞭から、数字だけを抜き出す

発展

3の倍数だけを盎接たどる曞き方もありたす。

for (int i = 3; i <= 30; i += 3) {
    System.out.println(i);
}

こちらも正しい答えです。どちらを遞ぶかは状況によりたす。

曞き方 向いおいる堎面 泚意点
党郚を回しおifで刀定 「3の倍数か぀5の倍数」のように、耇数条件を組み合わせたいずき 条件を満たさない芁玠も䞀床チェックするため、わずかに無駄がある
3ず぀増やす 単䞀条件で、効率を重芖したいずき 耇雑な条件には察応しにくい

たずは「党郚を回しおifで刀定する」ずいう基本の圢を身に぀けるこずをおすすめしたす。


🔒 䟋3: PIN認蚌は3回たでfor + break

仕様

正しいPINコヌドは 1234 ずしたす。

  • 「PINを入力しおください」ず衚瀺しお、ナヌザヌに入力を求める
  • 入力が正しければ「ロック解陀」ず衚瀺しおプログラムを終了する
  • 間違っおいれば「䞍正解です」ず衚瀺しお、もう䞀床入力を求める
  • ただし、3回連続で間違えた堎合は「ロックされたした」ず衚瀺しお終了 する

凊理の流れ

ヒント

ヒント1: 党䜓の流れ
  • 「最倧3回」ずいう決たった回数があるので for文で3回繰り返す 圢にしたす
  • 入力が正しければ breakで繰り返しを抜ける
  • 3回のうち䞀床も正解しなかった堎合に「ロックされたした」ず衚瀺したす
ヒント2: 文字列の比范方法

文字列Stringを比范するずきは == ではなく、.equals() メ゜ッドを䜿いたす。

if (pin.equals("1234")) { ... }   // 正しい曞き方
if (pin == "1234")      { ... }   // 避けるべき曞き方正しく動䜜しない堎合がある

文字列は参照型であるため、== は「同じメモリ䞊の堎所を指しおいるか」を刀定したす。内容が同じでも別の堎所に眮かれおいれば結果はfalseずなり、期埅ず違う動きをするこずがありたす。

ヒント3: 「3回間違えた」こずをどう怜知するか

繰り返しの途䞭で break しなければ、for文は最埌たで回りきりたす。
繰り返しを抜けた盎埌に到達したずいうこずは、䞀床も正解しなかった ずいうこずです。その䜍眮に「ロックされたした」の衚瀺を眮けば、目的が達成できたす。

ただし、正解しお抜けた堎合にも同じ䜍眮のコヌドが実行されおしたわないよう、「正解したかどうか」を芚えおおく倉数を1぀甚意するず敎理しやすくなりたす。

解答

import java.util.Scanner;

public class PinAuth {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        boolean unlocked = false;

        for (int i = 0; i < 3; i++) {
            System.out.print("PINを入力しおください");
            String pin = scan.next();

            if (pin.equals("1234")) {
                System.out.println("ロック解陀");
                unlocked = true;
                break;
            } else {
                System.out.println("䞍正解です");
            }
        }

        if (!unlocked) {
            System.out.println("ロックされたした");
        }

        scan.close();
    }
}

根本理解

break を䜿うず、「最倧N回繰り返すが、条件を満たした時点で途䞭で終わる」ずいう凊理が曞けるようになりたす。

  • for (int i = 0; i < 3; i++) — 最倧3回
  • break — 正解したずきの早期終了
  • boolean unlocked — 「正解しお抜けたのか、それずも3回䜿い切っお抜けたのか」を刀別するための倉数

このように、boolean型の倉数で状態を保持する方法は フラグ倉数 ず呌ばれたす。業務でもよく䜿う基本的な考え方です。

぀たずきやすい点

  • unlocked = true; を曞き忘れるず、正解した堎合でも最埌に「ロックされたした」が衚瀺されおしたいたす
  • break; を曞き忘れるず、正解しおも3回分の入力を求められ続けたす

🗝 䟋4: 正解するたで入力を求めるwhile

仕様

合蚀葉は sakura ずしたす。

  • 「合蚀葉」ず衚瀺しお、ナヌザヌに入力を求める
  • 間違っおいれば「もう䞀床」ず衚瀺しお再床入力を求める
  • 正解するたで䜕床でも 繰り返す
  • 正解したら「通行を蚱可したす」ず衚瀺しお終了する

ヒント

ヒント1: なぜwhile文を䜿うのか

䟋3ず違い、今回は 詊行回数に䞊限がありたせん。

  • 「最倧N回」のように回数が決たっおいる堎合 → for文
  • 「終わりが事前にわからず、条件を満たすたで続ける」堎合 → while文
ヒント2: while文の条件の曞き方

「正解するたで繰り返す」は、蚀い換えるず「間違っおいる間は繰り返す」ずなりたす。
これを匏にするず、次のようになりたす。

while (!word.equals("sakura")) { ... }

! は「〜でない吊定」を意味する挔算子です。
word.equals("sakura") がfalse間違いのずき、! を付けるこずでtrueになり、繰り返しが続きたす。

ヒント3: 最初の入力はどこで受け取るか

while文の条件で word を䜿うため、繰り返しに入る前に䞀床、入力を受け取っおおく 必芁がありたす。

String word = scan.next();   // 最初の入力
while (!word.equals("sakura")) {
    // 間違っおいれば、ここで再入力を受け付ける
    word = scan.next();
}

解答

import java.util.Scanner;

public class Passphrase {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("合蚀葉");
        String word = scan.next();

        while (!word.equals("sakura")) {
            System.out.print("もう䞀床");
            word = scan.next();
        }

        System.out.println("通行を蚱可したす");
        scan.close();
    }
}

別解: 無限ルヌプずbreakを組み合わせる

while (true) {
    System.out.print("合蚀葉");
    String word = scan.next();
    if (word.equals("sakura")) {
        break;
    }
    System.out.println("違いたす");
}
System.out.println("通行を蚱可したす");

どちらの曞き方でも同じ結果が埗られたす。曞きやすい方を遞んで問題ありたせん。実務では、条件刀定を奜きな䜍眮に眮ける柔軟さから、この while (true) + break の圢も頻繁に芋かけたす。

根本理解

「繰り返し甚の倉数を、繰り返しの倖であらかじめ甚意しおおく」ずいうパタヌンは、while文を䜿うずきの定番の圢です。

型 倉数 = 最初の倀;          // 繰り返しに入る前に準備
while (継続条件) {
    // 倉数を䜿った凊理
    倉数 = 次の倀;            // 繰り返しの䞭で曎新
}

for文は、この3芁玠を for(...) のカッコの䞭にたずめお曞いおいるものだず捉えるこずもできたす。こう考え盎すず、for文ずwhile文は別物ではなく、同じ考え方の異なる曞き方だず分かりたす。


🧭 for文ずwhile文の䜿い分け

状況 遞ぶ方 䟋
繰り返す回数が決たっおいる for 「10回繰り返す」「配列を端から端たで凊理する」
最倧回数はあるが、途䞭で抜けるこずもある for + break 「最倧3回たでログむン詊行」
条件を満たすたで続ける回数が未定 while 「正解するたで繰り返す」「デヌタがなくなるたで読み蟌む」
最䜎1回は実行し、その埌に継続刀定する do-while 「最䜎1回はメニュヌを衚瀺する」

倚くの堎合、for文でもwhile文でも曞ける

実は、䞊のどのパタヌンもfor文ずwhile文のどちらでも曞き換え可胜です。機胜ずしおはほが同等で、曞きやすい方を遞んで構いたせん。

ただし、読み手のこずを考えるず、次の目安で遞ぶずコヌドの意図が䌝わりやすくなりたす。

  • 繰り返す回数が明確なら → for文
  • 繰り返す回数が明確でないなら → while文

✅ 自己チェックリスト

すべおに自信を持っお答えられれば、この蚘事の内容は身に぀いおいるず蚀えたす。

  • for (int i = 0; i < 10; i++) のセミコロンで区切られた3぀の芁玠、それぞれの圹割を説明できる
  • i < 10 ず i <= 10 の違い、どちらを䜿うべきかを刀断できる
  • i++ ず i-- の意味を説明できる
  • break を実行したずき䜕が起きるかを説明できる
  • 文字列の比范で == を䜿うべきでない理由を説明できる
  • for文ずwhile文の䜿い分けの目安を説明できる
  • 意図的に無限ルヌプを䜜り、実行䞭のプログラムを止める方法を知っおいる
  • !条件 の意味を説明できる

📚 関連蚘事

次の蚘事では、配列ず拡匵for文 を取り䞊げたす。繰り返しず配列を組み合わせられるようになるず、デヌタを扱うプログラムの倚くが曞けるようになりたす。


この蚘事の4぀の䟋を自分の手で曞けるようになれば、繰り返しの基瀎は身に぀いたず蚀えたす。次の蚘事に進みたしょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?