Java
2021.12.21
Javaのwhile文・do-while文の使い方!ループ処理の注意点やforとの違い
2021.12.21
  • 1.Javaのwhile文の基本
  • 2.Javaのdo-while文の基本
  • 3.while文とdo-while文の使い分け
  • 4.while文の制御方法
  • 5.while文を使う際に気をつけるべきポイント
  • 6.【補足】while文とfor文の違いは?


1.Javaのwhile文の基本

Javaのwhile文は、プログラム上で繰り返しの処理を行える構文のひとつです。本記事ではこのwhile文の特徴や使い方について解説していきます。

1-1. Javaのwhile文とは?

while文は、与えられた条件が満たされている限り処理を繰り返すというループ文で、書き方は次の通りです。

while (条件式) {
  // 繰り返し処理
}

while文は条件式から始まり、条件式の結果はboolean型(trueかfalse)にならなければなりません。

条件式の結果がtrueの場合にループ内の処理部が繰り返され、条件式がfalseになるか処理部でbleakが実行されるとwhile文が終了します。

while文は、ループ回数が決まっていない場合に使用すると便利です。


(例)

・コーヒーを買えなくなるまで所持金を減らし続ける自動販売機プログラム

・入力されたひらがなに「ん」が来たら処理を終了する文字判定プログラム

1-2. Javaのwhile文の使い方

While文がどのように書かれるか、簡単なソースコードを見てみましょう。


以下は1を代入したiを1ずつ加算して、5になるまでwhile文のループが繰り返されるプログラムです。


iが6になるとi<=5がfalseになるので、繰り返し処理が終了します。

public class WhileLoop {
  public static void main(String[] args) {
    int i = 1;
    // iが5以下なら繰り返す 
    while (i <= 5) {
      System.out.println(i);
      i++;
    }
  }
}
// 出力:
1
2
4
5

2. Javaのdo-while文の基本


ここではdo-while文について説明します。whie文と似ており混同しやすいですが、動作が少し異なります。

2-1. Javaのdo-while文とは?

do-while文は、while文と同様に条件を満たしているときだけ繰り返しの処理を行う構文です。しかし、条件判断のタイミングがwhile文とは異なります。


書き方は次の通りです。

do {
  // 繰り返し処理
} while (条件式);

while文は、条件式がはじめからfalseの場合にはループ内の処理が1度も行われません。それに対し、do-while文ではループの後に条件式があるため、ループ内の処理が1度は行われる構文となっています。

2-2. Javaのdo-while文の使い方

実際にdo-while文を記載したソースコードを見てみましょう。


以下は10を代入したiを5ずつ加算し、19より小さい間do-while文のループが繰り返されるプログラムです。

public class DoWhileLoop10 {
  public static void mainString[] args) {
    int i = 10;
    do {
      System.out.println(i);
      i += 5;
    } while (i < 19);
    System.out.println("do-while文終了”);
  }
}
// 10,15が順番に出力された後、”do-while文終了”が出力される

iが20になるとi<19がfalseになるので繰り返し処理が終了しますが、仮にiの初期値が20でも、条件式の前にループ部分が処理されるので20が出力されます。

public class DoWhileLoop20 {
  public static void main(String[] args) {
    int i = 20;
    do {
      System.out.println(i);
      i += 5;
    } while (i < 19);
    System.out.println("do-while文終了”);
  }
}
// 20が出力された後、”do-while文終了”が出力される



3.while文とdo-while文の使い分け


while文とdo-while文についてそれぞれ見てきましたが、違いはdo-while文はループ内の処理が必ず一度は実行される点です。


例えば、買い物プログラムでは商品を買うお金が無ければ何も買うことができず、ループ内の処理が実行されません。よってwhile文を使います。


反対に、じゃんけんプログラムで勝敗がついたら処理を終了する場合は、結果に関わらず一度はじゃんけんをするので、do-while文を使った方が書きやすいです。


それぞれの処理の順番を理解して、実装したいプログラムに応じた選択ができると良いでしょう。



4.while文の制御方法

while文やfor文などの繰り返しの構文では、繰り返し処理の途中で抜けるbreak文とcontinue文が存在します。これらの使い方やサンプルコードを見ていきましょう。

4-1.break文でループを抜ける

break文を使うと、次のループが条件文上で予定されていても、ループ文そのものを抜けて次の処理に進みます。


以下サンプルコードでは、while文の条件はi<=10です。しかし、i=3の時点でbreak文により処理が終了しています。

public class WhileBreak {
  public static void main(String[] args) {
    int i = 1;
    // iが10以下のとき繰り返す 
    while (i <= 10) {
      System.out.println(i);
      if (i == 3) {
        System.out.println("while文終了");
        break;
      }
      i++;
    }
  }
}
// 1,2,3と順番に出力された後に、while文終了と出力される

4-2.continue文で処理をスキップする

continue文は、ループ中に実行されるとそのループの処理をスキップし、ループの先頭に処理を飛ばす構文です。


以下のサンプルコードでは、i=0から9まで10回ループは実行されています。しかし、3の倍数の時にはconitune文が実行されて、その後のループ内の標準出力の処理まで進まず、次のループが実行されています。

public class WhileContinue {
  public static void main(String[] args) {
    int i = 0;
    // iが10以下のとき繰り返す 
    while (i < 10) {
      i++;
      if (i % 3 == 0){
        continue;
      }
      System.out.println(i);
    }
  }
}
// 1,2,4,5,7,8,10と3の倍数が飛ばされて出力される


5.while文を使う際に気をつけるべきポイント


while文を使う際に気をつけるべきポイントや、プログラミング初心者が出してしまいがちなエラーについて紹介します。

5-1.条件式は必ずboolean型を返すこと

while文を書くときは、条件式内の結果が必ずboolean型になっている必要があることに気をつけましょう。下のサンプルコードは比較演算子や論理演算子が使われず、条件式ではなく代入式にしてしまっているためエラーとなります。

public class NotBooleanLoop {
  public static void main(String[] args) {
    int i = 0;
    // 条件式ではなく代入式のためコンパイルエラーとなる
    while (i = 5) {
      System.out.println(i);
      i++;
    }
  }
}

5-2.無限ループに気をつけること

while文の条件式が常にtrueとなってしまう場合は、while文の処理部が無限に実行されてしまいます。間違いで下記のような無限ループのプログラムを実行しないように気をつけましょう。

public class InfiniteLoop {
  public static void main(String[] args) {
    int i = 11;
    // iの初期値が11のため常にi > 10が成り立つ
    while (i > 10) {
      System.out.println("i=" + i);
      ++i;
    }
  }
}
// 常に条件式がtrueのため無限にループが続き出力が終わらない

実際のプログラムで無限ループを起こすと、メモリがオーバーフローするなど、サーバーやシステム全体に関わるトラブルを起こしかねません。安全なプログラムを作成するために、書いたコードは必ず確認する癖をつけましょう。



6.【補足】while文とfor文の違いは?


今回の記事では触れませんでしたが、while文だけでなくfor文も繰り返し処理を行うための構文です。for文とwhile文の違いとして、繰り返しの回数が条件部で明言されているかどうかという点が挙げられます。


for文は繰り返しの回数が決まっているのに対して、while文は繰り返しの回数が決まっていません。条件部がfalseになったりループの途中でbreak文が実行されるまでは、処理が繰り返されます。


実装したい処理に応じて使い分けられると良いでしょう。




7.プログラミング学習ならトレノキャンプへ


トレノキャンプでは、Javaを実践的に学ぶためのコースをオンラインで提供しています。オンデマンド配信なので、いつでも好きなときに受講が可能です。講座の詳しい内容は下記のバナーをクリックしてご覧ください。

この記事をシェア
おすすめの受講コース
  • Javaエンジニア完全パック -実務に必要なスキルを網羅-
  • はじめてのデータベース ~仕組みの理解とSQL~
  • Javaプログラミング本格入門シリーズ①~データ構造とアルゴリズム~
  • Javaで学習するユニットテスト入門 ~JUnitで理解するテスト手法~