繰り返し(do)

do while

while が繰り返すかどうか判断するのは繰り返し部分を実行する前です。これを一度実行したあとに条件判定をしたい場合が出てきます。

do {
    /* 繰り返しの処理の内容 */
}while( 終了判定条件  );

do ではどんな場合でも、繰り返しの処理の内容を1度は実行します。

具体例

次の例は1をどんどん2倍して表示し、1000より大きくなったらやめるプログラムです。

ファイル名 Dloop.java

/** whileの使い方 */
public class Dloop { 
       public static void main( String[] args ) {
            double x = 1;
            do {
                  System.out.println( x );
                  x = x * 2;
            } while( x < 1000 );
        }
}

結果は以下の通り。前のページのものと同一です。

1.0
2.0
4.0
8.0
16.0
32.0
64.0
128.0
256.0
512.0

do while の振る舞いも単純です。

while を書かなければ、無限に繰り返すプログラムになります。

do の基本形

for や while に比べて異なる形をしています。while では、

while ( 判定条件 ) { 繰り返しの処理の内容 }

do では、

do { 繰り返しの処理の内容 } while ( 判定条件 );

while を使って次のように書くと do と同等のことをするプログラムになります。

繰り返しの処理の内容
while ( 判定条件 ) { 繰り返しの処理の内容 }

課題

1.

上記の Dloop.java を作りなさい。

ファイル名 Dloop.java

2.

次は繰り返し乱数を発生させ、0.999より大きい数が出るまでに何回繰り返したかと、その数を表示するプログラムです。例によって Math.random() が 0~1 未満の数値を返す関数です。

ファイル名 Dloop2.java

public class Dloop2 { 
   public static void main( String[] args ) {
      double x;
      int i = 0;
      x = Math.random();
      i++;
      while( 0.999 > x ){
         x = Math.random();
         i++;
       }
      System.out.println(i + "回目で" + x + "が出ました。");
   }
}

3.

上記のプログラムを while でなく、do while を用いて書くと次の様にすっきりする。このような場合には do while が便利であることを感じ取りなさい。

ファイル名 Dloop3.java

public class Dloop3 { 
   public static void main( String[] args ) {
      double x;
      int i = 0;
      do {
         x = Math.random();
         i++;
      }while( 0.999 > x );
      System.out.println(i + "回目で" + x + "が出ました。");
   }
}

4.

上記のプログラムを参考に、繰り返し乱数を発生させ、0.001より小さい数が出るまでに何回繰り返したかと、その数を表示するプログラムを、do while を用いて作りなさい。

ファイル名 Dloop4.java

このプログラムはDloop3.javaと同じように表示すると分かりにくい表記になる

System.out.println(i + "回目で" + x + "が出ました。");

例えばこんな感じ

$ java Dloop4
425回目で4.293599243221369E-5が出ました。

これは 4.293599243221369 × 10-5 のことで、小数点を5桁左に動かして、

0.00004293599243221369 という数値がでたということになります。

課題としてはこれでOKですが、不満な方はSystem.out.printlnの次の行に以下の1行を加えてください。

System.out.printf("%3d回目で%10.9fが出ました。\n",i,x);

すると、0.000...という答えも一緒に出てきます。

$ java Dloop4
425回目で4.293599243221369E-5が出ました。
425回目で0.000042936が出ました。

Javaプログラミング(May.2011)
聖愛中学高等学校
http://www.seiai.ed.jp/
Feb.2009