第3週:繰り返し


3. 1 for
3. 2 練習問題
3. 3 標準出力
3. 4 二重の繰り返し
3. 5 練習問題
3. 6 while
3. 7 練習問題
3. 8 宿題

3.1 for

少しずつ違うことを何回も繰り返して行いたい場合があります。例えば、 次のように線を11本描くことを考えてみましょう。

これは、次のように drawLine を11回実行するプログラムを書くこ ともできます。

      g.drawLine(0, 0, 300, 0);
      g.drawLine(0, 0, 300, 30);
      g.drawLine(0, 0, 300, 60);
      g.drawLine(0, 0, 300, 90);
      g.drawLine(0, 0, 300, 120);
      g.drawLine(0, 0, 300, 150);
      g.drawLine(0, 0, 300, 180);
      g.drawLine(0, 0, 300, 210);
      g.drawLine(0, 0, 300, 240);
      g.drawLine(0, 0, 300, 270);
      g.drawLine(0, 0, 300, 300);
しかし、これが1万本になったら、とても1万個の drawLine を書く わけには行きません。そこで、1個の drawLine を何回も繰り返し て実行するプログラムを書きます。

上の例のプログラムは次のようになります。
import java.awt.*;
class Lines extends SfcDoNothing {
    void sfcDraw (Graphics g) {
	for (int y = 0; y <= 300; y = y + 30) {
	    g.drawLine(0, 0, 300, y);
	}
    }
}

for 文の書き方は次のようになります。
     for ( 初期設定; 継続条件; 差分設定 ) {
         繰り返しブロック
     }

3.2 練習問題

Lines.java を変更して、次のような図を描くようにしてみましょう。

  1. (ヒント: for 文を2回使います)

3.3 標準出力

繰り返しのプログラムを書いていると、変数の値がどのように変化するのか分 からなくなることがあります。そのような時は、繰り返しブロックの中で変数 の値を画面に表示するとよく分かります。しかし、図形用ウィンドウに表示す るのはやりにくいため、標準出力(standard output)を使います。

Lines.javay の値がどのように変化しているかを見る には次のようにします。
import java.awt.*;
class Lines extends SfcDoNothing {
    void sfcDraw (Graphics g) {
	for (int y = 0; y <= 300; y = y + 30) {
	    System.out.println(y);
	    g.drawLine(0, 0, 300, y);
	}
    }
}

Draw ボタンをクリックすると、sfcDraw メソッドが呼び出 されて実行されますが、実はそれ以外にも、ウィンドウが他のウィンドウに隠さ れて、再び現れたときなどにも実行されます。図形用ウィンドウには何度実行 しても同じ図形が 描かれるだけなので、見ている人は気が付きませんが、標準出力には実行されるた びにデータが書き込まれていくので、注意しましょう。

なお、この呼び出しは、ウィンドウシステムの設定によって、起きない場合もあ ります。

3.4 二重の繰り返し

次のように100個の円を描きたいときはどうすればいいでしょうか。

まず左端の縦一列から描くとします。Y座標が順に増えていって、下 までいくと、次の列はX座標を30増やして、Y座標はまた0から始めなければな りません。

これは、縦一列を描く繰り返しをまず考え、それを横にずらしながら繰り返し て描いていけば出来ます。プログラムは次のようになります。
import java.awt.*;
class Circles extends SfcDoNothing {
    void sfcDraw (Graphics g) {
	for (int x = 0; x < 300; x = x + 30) {
	    for (int y = 0; y < 300; y = y + 30) {
		System.out.println( x + "," + y );
		g.drawOval(x, y, 30, 30);
	    }
	}
    }
}

3.5 練習問題

Lines.javaCircles.java を参考にして、次のような 図を描くプログラムを作りましょう。

3.6 while

繰り返しを書くのには while 文も使えます。

     while ( 継続条件 ) {
         繰り返しブロック
     }

for 文で書いたプログラムは、while 文を使って書き直す ことができます。Lines.java は次のようにも書けます。
import java.awt.*;
class Lines extends SfcDoNothing {
    void sfcDraw (Graphics g) {
	int y = 0;
	while ( y <= 300 ) {
	    g.drawLine(0, 0, 300, y);
	    y = y + 30;
	}
    }
}

3.7 練習問題

Circles.javawhile 文を使って書き直しなさい。

3.8 宿題

  1. Input 欄に数値を入力し、その数だけ等間隔に線を描くプログラ ムを作りなさい。

  2. 次のような図を描くプログラムを作りなさい。

(ヒント: 内側の繰り返しの継続条件が変化します)


慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。
Copyright (c) 1999 慶應義塾大学