1

この記事の目次



1.  While文とは


While文とはあるブロックの処理に対して、何回繰り返して実行するか最初から決めれない場合に使う制御構造です。

while(現在 は 8月){
    学校が休み;
}
学校に行きます;

説明:

  • もし8月に、このプログラムを実行したら「現在は8月」である限り、「学校が休み」となります。つまり、8月の31日の23時59分59秒まで「学校が休み」の処理を繰り返します。9時になったら、ループから抜けて次の「学校に行きます」という処理に進みます。これはwhile文の仕組みです。
  • 2.  while文の使い方


     ●  while文の構造

    while(条件式){
        ブロック
    }
  • while文を実行すると、条件式の値がtrueである間、ブロックを繰り返し実行します。
  • 最初に計算した時の条件式がtrueであると、条件式は永遠にtrueであると思うかもしれませんが、代入のような副作用を伴う演算が条件式やブロックに含めていると、何回目かの繰り返しの後に、条件式をfalseにすることができ、ループから抜けます
  • 最初に計算した時の条件式がfalseであると、while文のブロックを実行せずに、次の命令に進んでしまいます
  • ブロック内にbreak文を入れることで、while制御から強制的に抜けれます。
  •  ●  例題

    int型のn数字をキーボードから入力して、「1+2+3+...+ n 」を計算しましょう。

    package helloworld;
    
    import java.util.Scanner; //Scannerクラスのimport
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int n, sum = 0;
            int number = 1;
            Scanner scanner = new Scanner(System.in);
            System.out.print("3より大きい数字を入力する: ");
            n = scanner.nextInt();
             
            while (number <= n) {
                
                sum += number;  // sum = sum + number;
                number += 1;    //number = number + 1;
                
            }
            
            System.out.println("実行結果:");
            System.out.println("1+2+3+...+" + n + " = " +  sum);
                    
        }
      
    }

    実行結果:

    プログラムの実行流れ(n = 5と入力した場合):

  • 最初に、和sum=0,number=1と初期値して、n=5(入力した場合)
  • ループ1回目をチェック:1 <= 5はtrueであるため、ブロック内を実行し、sum に sum + number = 0 + 1 = 1を代入して、numberを2に増やす
  • ループ2回目をチェック:1 <= 5はtrueであるため、ブロック内を実行し、sum に sum + number = 1 + 2 = 3を代入し、numberを3に増やします
  • ループ3回目をチェック:3 <= 5はtrueであるため、ブロック内を実行し、sum に sum + number = 3 + 3 = 6を代入し、numberを4に増やします
  • ループ4回目をチェック:4 <= 5はtrueであるため、ブロック内を実行し、sum に sum + number = 6 + 4 = 15を代入し、numberを5に増やします
  • ループ5回目をチェック:5<= 5はtrueであるため、ブロック内を実行し、sum に sum + number = 10 + 5 = 15を代入し、numberを6に増やします
  • ループ6回目をチェック:6 <= 5はfalseであるため、ブロック内を実行せず、ループから抜けて、下の命令を実行し、コンソールに出力します
  • 3.  do-while文の使い方


     ●  do-while文の構造

    do{
    
        ブロック
    
    }while(条件式);
  • while文と同様に「条件式」の型はboolean型ではなければなりません。
  • while文との違いはdo文は繰り返し部分を必ず1回以上実行することです。まずブロックの内容を1回実行した後に、条件式を計算して、ブロックを再度繰り返し実行するかを決定します。
  • do-while文の最後にセミコロン;をつけ忘れないことです
  •  ●  例題

    上のwhile文の例題をdo-while文に書き換えます(実行結果n=5の場合は変わりません)

    package helloworld;
    
    import java.util.Scanner; //Scannerクラスのimport
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int n, sum = 0;
            int number = 1;
            Scanner scanner = new Scanner(System.in);
            System.out.print("3より大きい数字を入力する: ");
            n = scanner.nextInt();
             
            do {
                
                sum += number;  // sum = sum + number;
                number += 1;    //number = number + 1;
                
            }while (number <= n);
            
            System.out.println("実行結果:");
            System.out.println("1+2+3+...+" + n + " = " +  sum);
                    
        }
      
    }

    4.  ループを制御する方法


     ●  break文でループを抜ける方法

    「break」文を実行すると、ループ内のそれ以降の処理は行わずにループ外の次の処理に移ります。

    以下はwhile構文の例題からbreak文使用のように書き換えたプログラムです

    例題:

    while文の例題をbreak文を導入して書き換えると、以下のようになります(実行結果は変わりません)

    package helloworld;
    
    import java.util.Scanner; //Scannerクラスのimport
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int n, sum = 0;
            int number = 1;
            Scanner scanner = new Scanner(System.in);
            System.out.print("3より大きい数字を入力する: ");
            n = scanner.nextInt();
             
            while (true) {
                if(number > n){
                    break;
                }
                
                sum += number;  // sum = sum + number;
                number += 1;    //number = number + 1;
                
            }
            
            System.out.println("実行結果:");
            System.out.println("1+2+3+...+" + n + " = " +  sum);
                    
        }
      
    }

    説明:

  • 上のプログラムに、while文の条件式にtrueを入れました。つまり、このwhile文のブロックを無限に繰り返すのを要求しているということです。
  • しかし、break文を入れたことで、while文を強制に終了させることができます。ここでif文でnumber > nという条件が満たされたらbreak文を実行し、ループから抜けます。それで、全体的に見ると、この記事の最初の例題とプログラムのアルゴリズムは全く同じですので、結果も一緒になります。
  •  ●  continue文で処理をスキップする方法

    「continue」文を実行すると、ループ内のそれ以降の処理は行わずに,ループの最初の処理から再び実行されます。(1つのループをスキップする)

    例題:

    記事の最初の例題を改造「1+2+3+5」を計算しましょう。(4を除いた1から5までの和)

    package helloworld;
     
    public class HelloWorld {
         
        public static void main(String[] args) {
            int n, sum = 0;
            int number = 1;
            n = 5;
             
            while (number <= n) {
                if(number == 4){
                    number += 1;
                    continue;
                }
                sum += number;  // sum = sum + number;
                number += 1;    //number = number + 1;
                
            }
            
            System.out.println("実行結果:");
            System.out.println("1+2+3+5 = " +  sum);
                    
        }
      
    }

    実行結果:

    説明 : number = 4 の時にif文の条件式を満たしたので、if文のブロックを実行して、numberを5に増やしてから、continue文で下の命令を実行せず、次のループに進みます。

     ●  無限ループ

    無限ループとは強制的にされない限り、永遠に繰り返しを続ける制御構造のことです。意図に無限ループを作成する場合は以下の方法があります。

    while(true){            
        ブロック
    }

    5.  まとめ


    ここまではwhile、do-while文の構造や使い方などは理解しましたでしょうか!if文、while文、break文、continue文をそれぞれ特徴と役割を身につけて、自作のプログラムを作れるように頑張って練習しましょう。

    以下のwhile文、do-while文に関する演習問題です。ぜひやってみてください。

    6.  演習問題


    広告