コンピュータ基礎および演習II

演習問題

解答は

に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。

Circle.class が複数の問題で生成されるので、実行の際には注意すること。 同一のディレクトリで作業している場合、 最後にコンパイルしたソース内の Circle クラスしか残っていないことになる。 実行前に実行するプログラムをコンパイルしなおせば問題は発生しないので、 身に覚えのないエラーが出る場合には試してみるとよい。

問題1

円の面積と外周を求めるプログラムを書きなさい。 これは前回の問題2と同じであるが、今回はコンストラクタを使用すること。 ファイル名は PropertyOfCircle2.java とする。

前回の問題2の Circle クラスでは、インスタンス生成後に setRadius(int r) で半径を与えていた。 しかし、半径はすべてのインスタンスに必須の属性なので、 コンストラクタの引数として与えた方がスマートである。 Circle クラスで引数ありのコンストラクタを定義し、 PropertyOfCircle2 の mainメソッドで、 インスタンス生成時にそのコンストラクタを使用するようプログラムを変更しなさい。

問題2

問題1の円は、中心が原点にあり半径が r の円だとする。 任意の点(x, y)が円内に含まれているかどうかを調べるメソッド includes(int x, int y) を Circle クラスに追加しなさい。 ファイル名は PointsAndCircle.java とする。 PointsAndCircle クラスの main メソッドで、点(-10,-10)を左下、 点(10,10)を右上とする矩形内の点が円内に含まれているかをチェックする。 円の半径は10前後にするとよい。

class Circle {
    ...

    /** 指定された点がこの円の内部か否か */
    boolean includes(int x, int y) {
        ...
    }
}

class PointsAndCircle {
    public static void main(String[] args) {
        // 円のインスタンスを生成
        Circle c = ...

        // 矩形内の点が円内にあるかチェック
        for(int y = 10; y >= -10; y--) {
            for(int x = -10; x <= 10; x++) {
                // 円の中に含まれている点であれば * を
                // そうでなければ空白を表示 (改行はしない)
                ...
            }
            System.out.println();
        }
    }
}

点 (x, y) が、原点中心で半径 r の円に含まれているかどうかは、 原点からの距離を比較すればよい。 原点からの距離が r 以下であれば、点は円内にある。

両辺を2乗しても成り立つので

メソッド includes では引数で指定された (x,y) が上記の条件を満たすか調べれば良い。

ちなみに、実数 x の平方根は Math.sqrt(x) とすると求まる。

問題3

問題3-1

一曲の音楽を表すクラス (class Music) を定義しなさい。 このクラスには以下の属性、コンストラクタ、メソッドがあるものとする。

ここで定義したクラス Music を使う例としては、 次のようなプログラムが考えられる。

class MusicFreak {
    public static void main(String[] args) {
        Music favoriteSong = new Music("Long Train Runnin'", "Double Brothers");

        System.out.println("My favorite: " + favoriteSong.getName() +
                           " by " + favoriteSong.getMusician());
    }
}

class Music {
    // クラス Music の内容をここに書く
}

上の定義にもとづきクラス Music を作成し、 プログラムが正しく動くようにし提出しなさい。 ファイル名は MusicFreak.java である。

問題3-2

上で定義した Music クラスのインスタンスを再生することができる、 携帯音楽プレーヤのクラス MobileMusicPlayer を考える。 なお、今回作成する携帯音楽プレーヤには一曲だけ曲をダウンロードできるとする。

携帯音楽プレーヤ (class MobileMusicPlayer) は、 次のようなクラスであるとする。

コンストラクタが必要であれば、 必要に応じて適当なコンストラクタを宣言しても良い。

クラス MobileMusicPlayer を定義し、 次のプログラムが正しく実行できるようにして提出しなさい。 (ファイル名: MobileMusicListener.java)

class MobileMusicListener {
    public static void main(String[] args) {
        MobileMusicPlayer myIPod = new MobileMusicPlayer();
        Music song = new Music("Long Train Runnin'", "Double Brothers");

        myIPod.download(song);
        myIPod.play();
    }
}

class MobileMusicPlayer {
    Music song;

    // ここにクラス MobileMusicPlayer の内容を書く
}

class Music {
    // 上で定義したクラス Music の内容と同様
}

このプログラムを実行したときの結果の例は次のようなものである。

$ java MobileMusicListener
Long Train Runnin' (Double Brothers) がダウンロードされました
Long Train Runnin' (Double Brothers) を演奏中です