コース一覧
    Java入門:繰り返しとメソッド
    while 文

    Java入門:繰り返しとメソッド

    forやwhileの繰り返しとメソッドを学び、処理を反復と部品に分けて書けるようにします。

    1
    繰り返し
    01. for 文の基本5分
    02. 1 から N までの合計5分
    03. 九九の段を作る5分
    04. while 文5分
    05. カウントダウン5分
    06. do-while 文5分
    07. 二重ループ5分
    08. break と continue5分
    09. FizzBuzz 完成5分
    10. 繰り返しクイズ5分
    11. 第 4 章 まとめクイズ5分
    2
    メソッド
    01. メソッドを定義する5分
    02. 引数を受け取るメソッド5分
    03. 戻り値を返す5分
    04. 複数の引数を取るメソッド5分
    05. メソッドのオーバーロード5分
    06. メソッドクイズ5分
    07. BMI を計算するメソッド5分
    08. 第 5 章 まとめクイズ5分

    while 文

    何回まわるか、書く前には分からない

    for 文は for (int i = 0; i < 5; i++) のように、回す回数を最初に書きます。5 回なら 5、配列の長さぶんなら長さの値。回数が先に決まっているから書ける形です。

    ところが 123 が何桁かを数えるとき、その回数は数え終わってからでないと分かりません。i < ? の ? に入れる数が無いのです。こういう「終わる条件だけが決まっている繰り返し」のために while 文があります。

    while は続ける条件だけを書く

    Java

    while (条件) {
        // 条件が true のあいだ、ここが何度も動く
    }

    条件を見る、true なら中身を 1 周ぶん動かす、また条件を見る。これを false になるまで続けます。500 mL の水を 200 mL ずつコップに注いでいく例だと、こうなります。

    Java

    int water = 500;
    while (water >= 200) {
        water = water - 200;
    }
    // water は 100 になって止まる

    500 から 300、100 と減っていき、100 >= 200 が false になった時点で抜けます。for のようなカウンタ変数は出てきません。ループが続くかどうかを決めている値そのものを中で動かす、というのが while の書き方です。

    water = water - 200; の行を消すと、water はずっと 500 のままで条件は永遠に true です。これが無限ループです。Java Playground では 5 秒で打ち切られますが、本物のアプリなら画面が固まります。while を書いたら、条件に出てくる変数を指でなぞって、どこで変わるかを必ず確かめてください。

    桁を数えるときに使う道具をひとつ。Java の int どうしの割り算は小数を切り捨てます。

    Java

    System.out.println(123 / 10);  // 12
    System.out.println(12 / 10);   // 1
    System.out.println(1 / 10);    // 0

    10 で割るたびに、右端の桁が 1 つ落ちていきます。

    0 を渡すと、ループは一度も回らない

    今回の課題は 0 も 1 桁として数える仕様です。ここが地味な落とし穴になります。while (n > 0) という条件だと、n が 0 のときは中身が一度も動きません。数えるための変数は初期値のまま返ることになります。

    仕様を読むときは、境界の値を先に探す癖をつけてください。空の入力、0、最大値、マイナス。こうした値はテストが必ず突いてきます。

    やってみよう

    Solution.digitCount(int n) を完成させましょう。0 が来たときにどう返すかをループより前に決めておき、あとは桁が残っているあいだ while で回して、10 で割りながら回数を数えます。

    書けたら 1 9 99 10000 0 を入れて、手で数えた桁数と合うか確かめてください。int の最大値 2147483647 も 10 桁として数えてくれるはずです。

    要件

    1. クラス名は Solution、メソッド名は digitCount、引数は int n 1 つにすること
    2. 戻り値の型は int で、n の桁数を返すこと
    3. ループには 必ず while 文を使う こと (for 文は使わない)
    4. n == 0 のときは 1 を返すこと (0 は 1 桁として扱う仕様)

    ヒント

    `int count = 0;` を用意して、`while (n > 0)` のループで `count` を `1` ずつ増やしながら `n = n / 10;` で `n` を縮めていきましょう

    `Java` の `int` どうしの割り算は小数を切り捨てます。`123 / 10` は `12.3` ではなく `12` になるので、これだけで桁を 1 つずつ削れます

    `0` だけは特別扱いが必要です。`while (n > 0)` の前に `if (n == 0) return 1;` を書くと素直に解けます

    ループの中で `n` を更新するのを忘れると無限ループになります。`count` を増やすだけでなく、`n` も必ず変えてください

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • カウントダウン

      Java の `while` 文を使って、n から 1 までを空白区切りでつないだ文字列を作るカウントダウン処理を学びます。

    • do-while 文

      `do-while` 文を使って「最低 1 回は実行したい繰り返し」を書いてみよう。条件チェックのタイミングが `while` とどう違うのかを身体に染み込ませる回。

    • 二重ループ

      ループの中にループを入れた二重ループの考え方を学び、ピラミッド型の文字列を組み立ててみよう。

    • break と continue

      ループの途中で抜ける `break` と、1 イテレーションだけスキップする `continue` を使って、繰り返しを自由自在にコントロールしよう。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 配列サイズ固定の同型データの集まり
    • カウンタ数を保持して増減する典型 UI
    • 変数データに名前をつけて参照する仕組み
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • テストバグを見つける工程
    • クラスデータと振る舞いを束ねる単位
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    main.java
    エディタを読み込んでいます

    メモ

    while 文

    ⌘S で保存