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

演習問題

解答は

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

問題1

以下に挙げる各組み合わせについて、
     a) クラス - インスタンスの関係か
     b) そう判断した理由
を述べなさい。解答は文章でファイル Q1.txt に記述すること。

  1. 大学 - 私立大学
  2. 私立大学 - 東京電機大学
  3. 東京電機大学 - 情報メディア学科
  4. 情報メディア学科 - 情報メディア学科1年生

ヒント: まず左側がクラスとしてふさわしいかを判断し、クラスだった場合には、次に右側がそのクラスのインスタンスとして正しいかを考えればよい。

問題2

クラスとインスタンスの関係にある身近な例を一つ挙げなさい。 また、そのクラス定義を書きなさい。 クラス定義は厳密なプログラムの形でなくても良い。 最低限、クラス名、属性名、メソッド名、メソッドの内容 (言葉で説明すれば良い) が整理されていれば良い。 解答はファイル Q2.txt に記述すること。

問題3

円の面積と外周を求めるプログラムを書きなさい。 ファイル名は PropertyOfCircle.java とする。

この問題を「円」というモノに着目すると、 以下のような円オブジェクトを考えることができる。

・半径
 
・面積を求める
・円周を求める
 
 

プログラムの概略は次のようになるはずである。

class Circle {
    属性「半径」の宣言

    void setRadius(int r) {
        ......
        半径の属性値を設定する処理
    }

    int area() {
        ......
        半径の属性値を用い、面積を計算する処理
    }

    int outline() {
        ......
        半径の属性値を用い、円周を計算する処理
    }

}

class PropertyOfCircle {
    public static void main(String[] args) {
        円オブジェクトを生成する ;
        円の半径を設定するメソッドを実行 ;

        int a;
        a = 円の面積を計算するメソッドを実行 ;
        System.out.println("Area: " + a);

        int l;
        l = 円の外周を計算するメソッドを実行 ;
        System.out.println("Outline: " + l);

    }
}

なお、半径は任意に決めて良い。 円周率は 3 とする。各計算は整数で行えば良い。

問題4

あなたは某RPG作成ソフトにハマり、もっと自由に機能を追加したいと思い、 自分で RPG のプログラムを作ることにした。

問題4-1

登場人物のクラスを設計するにあたり、登場人物の属性、 動作などを箇条書きにして書き出しなさい。 ファイル名は Charactor.txt とする。

属性の例

動作の例

上記の例を含め、2つ以上の属性、3つ以上の動作を取りあげること。

問題4-2

問題4-1 での分析を踏まえ、登場人物のクラスを記述し、 用意したメソッドを一通り実行するプログラムを作成しなさい。 ファイル名は RPG.java とする。 また、実行結果の例をファイルで提出しなさい。 ファイル名は RPG.txt とする。

登場人物のクラス名は Charactor とする。 オブジェクトの状態を表示する showStatus() というメソッドを用意し、 これを動作の前後で実行することにより状態の変化を表示するようにすること。

以下のテンプレートに追加する形で作成してもよい。

class RPG {
    public static void main(String[] args) {
        Charactor john = new Charactor();

        john.setHitPoint(1000);
        john.showStatus();
        john.walk(3);
        john.showStatus();
        john.sleep();
        john.showStatus();
    }
}

/** 登場人物のクラス */
class Charactor {
    /** 体力 */
    int hitPoint;
    /** 体力をセット */
    void setHitPoint(int hp) {
        hitPoint = hp;
    }
    /** 距離 distance を移動 */
    void walk(int distance) {
        System.out.println("Walking...(" + distance + ")");
        // 距離に比例して体力を消耗
    }
    /** 寝る */
    void sleep() {
        System.out.println("Sleeping...");
        // 睡眠をとると体力がある程度回復する
    }
    /** 状態表示 */
    void showStatus() {
        System.out.println("HitPoint: " + hitPoint);
    }
}

もし必要であれば、Math.random() により double の乱数(0.0以上1.0未満)を得ることができる。