3. 1 for 文 3. 2 練習問題 3. 3 標準出力 3. 4 二重の繰り返し 3. 5 練習問題 3. 6 while 文 3. 7 練習問題 3. 8 宿題
少しずつ違うことを何回も繰り返して行いたい場合があります。例えば、 次のように線を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 ( 初期設定; 継続条件; 差分設定 ) {
繰り返しブロック
}
Lines.java を変更して、次のような図を描くようにしてみましょう。
(ヒント: for 文を2回使います)
繰り返しのプログラムを書いていると、変数の値がどのように変化するのか分 からなくなることがあります。そのような時は、繰り返しブロックの中で変数 の値を画面に表示するとよく分かります。しかし、図形用ウィンドウに表示す るのはやりにくいため、標準出力(standard output)を使います。
Lines.java で y の値がどのように変化しているかを見る には次のようにします。
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);
}
}
}
|
|
なお、この呼び出しは、ウィンドウシステムの設定によって、起きない場合もあ ります。 |
次のように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);
}
}
}
}
|
Lines.java と Circles.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;
}
}
}
|
(ヒント: 内側の繰り返しの継続条件が変化します)