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 を変更して、次のような図を描くようにしてみましょう。
繰り返しのプログラムを書いていると、変数の値がどのように変化するのか分 からなくなることがあります。そのような時は、繰り返しブロックの中で変数 の値を画面に表示するとよく分かります。しかし、図形用ウィンドウに表示す るのはやりにくいため、標準出力(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; } } } |
(ヒント: 内側の繰り返しの継続条件が変化します)