1. 3 桁の整数
  2. 1 桁の整数
  3. 5 桁の整数
  4. 0 は 1 桁として扱う (エッジケース)
  5. 2 桁の整数
  6. 1 (最小の正の整数)
  7. 10 (2 桁の最小)
  8. 100 (3 桁の最小、境界値)
コース一覧
Java入門:基礎文法編
while 文

Java入門:基礎文法編

変数、制御構文、メソッド、クラス、継承、インターフェースなど Java とオブジェクト指向の基礎を、コードを書きながら学べる無料コースです。プログラミング初学者や、業務システム開発で Java を扱う必要がある社会人を対象としています。約 17 時間 (1 日 30 分 × 34 日) で 69 レッスンを修了でき、修了後は Spring などのフレームワーク学習や Java 認定試験への準備が無理なく進められます。

1
Hello, Java
01. はじめての Java プログラム5分
02. 複数行の出力5分
03. 変数を使った自己紹介5分
04. コメントを書く5分
05. 第 1 章まとめクイズ5分
2
変数と演算
01. 変数を宣言する5分
02. データ型の使い分け5分
03. 変数とデータ型クイズ5分
04. 四則演算と剰余5分
05. 税込価格を計算する5分
06. インクリメントとデクリメント5分
07. 比較演算子5分
08. 論理演算子5分
09. 演算子の優先順位5分
10. 文字列の連結5分
11. 型変換 (キャスト)5分
12. 第 2 章 まとめクイズ5分
3
条件分岐
01. if 文の基本5分
02. if-else 文5分
03. else if で複数分岐5分
04. 成績判定プログラム12分
05. うるう年を判定する5分
06. switch 文5分
07. 三項演算子5分
08. じゃんけんの勝敗判定15分
09. FizzBuzz の判定部分5分
10. 第 3 章 まとめクイズ5分
4
繰り返し
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分
5
メソッド
01. メソッドを定義する5分
02. 引数を受け取るメソッド5分
03. 戻り値を返す5分
04. 複数の引数を取るメソッド5分
05. メソッドのオーバーロード5分
06. メソッドクイズ5分
07. BMI を計算するメソッド5分
08. 第 5 章 まとめクイズ5分
6
配列
01. 配列の基本5分
02. 配列の要素にアクセス5分
03. 配列を for で走査5分
04. Javaで配列の合計・平均を求める方法(forループ)5分
05. 配列の平均5分
06. 配列の最大値5分
07. 配列の線形探索12分
08. 拡張 for ループ5分
09. 配列クイズ5分
10. 第 6 章 まとめクイズ5分
7
クラスとオブジェクト
01. クラスを定義する5分
02. クラスにフィールドを持たせる12分
03. クラスにメソッドを定義する5分
04. インスタンスを作る5分
05. コンストラクタ5分
06. this キーワード5分
07. カプセル化 (private と getter)12分
08. Person クラスを作る5分
09. Product クラスで税込価格15分
10. 銀行口座クラス15分
11. toString のオーバーライド5分
12. クラスとオブジェクト クイズ5分
13. Java 入門 最終クイズ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 桁として扱う仕様)

入出力例

digitCount(123) → 3 digitCount(9) → 1 digitCount(10000) → 5 digitCount(0) → 1 digitCount(99) → 2 digitCount(1) → 1 digitCount(10) → 2 digitCount(100) → 3

ヒント

`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 で保存