06020
1年後期>report1


課題:オリジナルのjavaアプレットを作成し考察せよ。

1.サンプルで作ったHelloa.javaCircles.javaを組み合わせて、乱数によって文字列がランダムに表示されるアプレットを作る。

1-1.プログラム
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
import java.awt.*;
            // ウィンドウ関連ツール(Abstract Window Toolkit)を使う
import java.applet.Applet;
import java.util.Random;             // 乱数を使う

public class Report101 extends Applet {             // サブクラス Report101
    public void paint(Graphics g) {                 // paint()メソッド

    Random a = new Random();                        // 新しい乱数列 a を用意する
    for ( int i = 0; i < 10; i++) {                 // 0 から 9 までループ  
        int x = (int)(300 * a.nextDouble());
            // 整数変数 x に 300 (0以上1未満の実数の乱数) を(切り捨てて整数にして)代入する
        int y = (int)(300 * a.nextDouble());        // 上と同様
        g.drawString("Hello, Java world!", x, y);   // 文字列描画メソッド
        }
    }
}

1-2.実行結果Report101.html

1-3.考察
1〜4行目ではこのアプレットを動かすのに必要なクラスをインポートしている。
6行目ではReport101クラスがAppletクラスを拡張する事を宣言している。アプレットでは必ずこのクラスを拡張しなければならない。
7行目のpaint()メソッドはアプレットの出力を生成する役割がある。このメソッドはGraphicsオブジェクトを引数として受け取る。
10〜14行目では作られた乱数によってx座標とy座標の値を決めて、GraphicsオブジェクトのdrawString()メソッドで文字列を表示する事を10回繰り返している。

xとyの値はどのようになっているだろうか。




2. x座標とy座標の値を調べる。

2-1.プログラム
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
import java.awt.*;
            // ウィンドウ関連ツール(Abstract Window Toolkit)を使う
import java.applet.Applet;
import java.util.Random;             // 乱数を使う

public class Report102 extends Applet {             // サブクラス Report102
    public void paint(Graphics g) {                 // paint()メソッド

    Random a = new Random();                        // 新しい乱数列 a を用意する
    for ( int i = 0; i < 10; i++) {                 // 0 から 9 までループ
        int x = (int)(300 * a.nextDouble());
            // 整数変数 x に 300×(0以上1未満の実数の乱数) を(切り捨てて整数にして)代入する
        int y = (int)(300 * a.nextDouble());        // 上と同様
        g.drawString("Hello, Java world!", x, y);   // 文字列描画メソッド
        g.drawString("x="+x, x, y+10);            // x の値を表示
        g.drawString("y="+y, x, y+20);            // y の値を表示
        }
    }
}

2-2.実行結果Report102.html

2-3.考察
15,16行目でx座標とy座標の値を出力する。y+10,y+20としているのは文字をずらして重ならないようにするためである。

文字列の基準の位置(x=0,y=0)はどこだろうか。
position
上の図を見ると左上のx=0,y=0となっている文字列がある。その上に"Hello, java world!"が隠れている。これは文字列の左下が基準点になっている事を意味する。

注意しなければならないのは、文字を画面の左上に表示させたい時にx=0,y=0と場所を指定すると画面に入らなくなってしまう事である、文字の大きさ分 yの値を増やさなければならない。

乱数aはどのような値をとっているだろうか。




3.乱数aの値を調べる。

3-1.プログラム
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
import java.awt.*;
            // ウィンドウ関連ツール(Abstract Window Toolkit)を使う
import java.applet.Applet;
import java.util.Random;             // 乱数を使う

public class Report103 extends Applet {             // サブクラス Report103
    public void paint(Graphics g) {                 // paint()メソッド

    Random a = new Random();                        // 新しい乱数列 a を用意する
    for ( int i = 0; i < 10; i++) {                 // 0 から 9 までループ
        int x = (int)(300 * a.nextDouble());
            // 整数変数 x に 300×(0以上1未満の実数の乱数) を(切り捨てて整数にして)代入する
        int y = (int)(300 * a.nextDouble());        // 上と同様
        float b = (float)(a.nextDouble());          // a の値を小数に変換
        g.drawString("Hello, Java world!", x, y);   // 文字列描画メソッド
        g.drawString("x="+x, x, y+10);            // x の値を表示
        g.drawString("y="+y, x, y+20);            // y の値を表示
        g.drawString("a="+b, x, y+30);            // 乱数 a の値を表示
        }
    }
}

3-2.実行結果Report103.html

3-3.考察
14行目で乱数aの値をbに入れ、18行目でブラウザに表示させる。
結果を見るとコメントに書いてある通りaは0以上1未満の実数になっている。しかし0は確認出来なかった。
javaのソースを見ると初めにaの値を1つに決め、xやyの値にしているように見えるが、実際はaが呼び出されるたびに値が変わる。