第27週目課題

以下のプログラムを作成せよ。

Review01

Review01a

二次元座標上の位置を表すクラス Point をパッケージ j2.lesson14 に作成しなさい。

下記のコンストラクタ、メソッドを用意すること。

また、フィールドを作成する場合は クラス外からアクセスできないようなアクセス修飾子を設定すること

Review01b

Review01a で作成した Point クラスを使用してなにかプログラムを作成しなさい。

Review02

Review02a

図形を表すインターフェース Polygon をパッケージ j2.lesson14 に作成しなさい。

このインターフェースでは、次のメソッドを定義すること。

Review02b

長方形を表すクラス Rectangle をパッケージ j2.lesson14 に作成しなさい。

このクラスは Review02a で用意した j2.lesson14.Polygon インターフェースを実装すること。

また、j2.lesson14.Polygon で定義したメソッドに加え、次のコンストラクタを用意すること。

j2.lesson14.Polygon で定義しているメソッドについては、j2.lesson14.Polygon の仕様に合わせて設計すること。

また、フィールドを作成する場合は クラス外からアクセスできないようなアクセス修飾子を設定すること

Review02c

三角形を表すクラス Triangle をパッケージ j2.lesson14 に作成しなさい。

このクラスは Review02a で用意した j2.lesson14.Polygon インターフェースを実装すること。

また、j2.lesson14.Polygon で定義したメソッドに加え、次のコンストラクタを用意すること。

j2.lesson14.Polygon で定義しているメソッドについては、j2.lesson14.Polygon の仕様に合わせて設計すること。

また、フィールドを作成する場合は クラス外からアクセスできないようなアクセス修飾子を設定すること

Review02d

直角柱を表すクラス Prism をパッケージ j2.lesson14 に作成しなさい。

このクラスは、次のコンストラクタ、メソッドを用意すること。

Review02e

下記を参考に、Review01a,b,c,d で作成したプログラムを実際に使用したプログラムを作成せよ。また、その動作について考察せよ。

// 三角柱を作成する
Polygon triangle = new Triangle(3.0, 4.0, 5.0);
Prism triPole = new Prism(triangle, 3.0);
// 直方体を作成する
Polygon rectangle = new Rectangle(6.0, 7.0);
Prism cuboid = new Prism(rectangle, 4.0);

Review03

Review03a

下記のクラス AbstractReceipt をパッケージ j2.lesson14 に作成し、このクラスの各メソッドについて考察せよ。

package j2.lesson14;

public abstract class AbstractReceipt {

    private final String[] names;

    private final int[] costs;

    private int itemCount;

    // コンストラクタ
    public AbstractReceipt() {
        super();
        this.names = new String[5];
        this.costs = new int[5];
        this.itemCount = 0;
    }

    // レシートに商品を追加する
    public void addItem(String name, int cost) {
        this.names[this.itemCount] = name;
        this.costs[this.itemCount] = cost;
        this.itemCount++;
    }

    // レシートを表示する
    public void show() {
        // show レシート上部
        showHeader();

        // show レシートの中身
        showBody();

        // show レシート下部
        showFooter();
    }

    // 合計金額を取得
    public int getTotalAmount() {
        // return total of costs[0..itemCount]
        int total = 0;
        for (int i = 0; i < this.itemCount; i++) {
            total += this.costs[i];
        }
        return total;
    }

    // レシートの中身を表示する (共通なのでここで定義する)
    protected void showBody() {
        // for i = 0 .. itemCount - 1
        for (int i = 0; i < this.itemCount; i++) {
            // print names[i], 改行
            System.out.println(this.names[i]);
            // print " " + costs[i] + "円", 改行
            System.out.println("    " + this.costs[i] + "円");
        }
        // print 改行
        System.out.println();
        // print "合計:" + 合計金額 + "円"
        System.out.println("合計:" + getTotalAmount() + "円");
    }

    // レシート上部を表示する (ここでは定義しない)
    protected abstract void showHeader();

    // レシート下部を表示する (ここでは定義しない)
    protected abstract void showFooter();
}

Review03b

Review03a で用意した AbstractReceipt クラスを継承し、show() メソッドを呼び出すと次のような表示

ほげ書店
TEL:03-xxxx-yyyy
----------------
(showBody()と同じ出力)
----------------
ありがとうございました。

をするクラス HogeBooksReceipt をパッケージ j2.lesson14 に作成しなさい。

Review03c

Review03b で作成した HogeBooksReceipt を使用し、次のような表示をさせよ。また、動作について考察せよ。

ほげ書店
TEL:03-xxxx-yyyy
----------------
JLS, 2nd
    5755円
JVMS, 2nd
    4200円

合計:9955円
----------------
ありがとうございました。

Review04

コンソールから入力された行を逆順に表示するプログラム LineReversePrint クラスをパッケージ j2.lesson14 に作成しなさい。

このプログラムでは、コンソールからドット「.」一文字のみの入力行が来るまで次々と文字列を入力させ、最後に入力された行から逆順にコンソールに表示する。表示する際は、ドット「.」一文字のみの行はコンソールに表示しない。

つまり、"a", "b", "c", "." と入力すると、

c
b
a

と出力されるようなプログラムである。

Review05

テキストファイルの内容をコンソールに表示するプログラム FileToConsole クラスをパッケージ j2.lesson14 に作成しなさい。

このプログラムでは、まずテキストファイル名をコンソールに入力させ、入力されたファイルの内容をコンソールに表示する。

ただし、ファイルが開けなかった場合には「(ファイル名)が開けませんでした」と表示しプログラムを終了させること。

Review06

Review06a

次のような表示を持つプログラム Counter クラスをパッケージ j2.lesson14 に作成しなさい。


Review06b

Review06a で作成したプログラムを下記のように改造しなさい

AbstractAction を継承する方法ではなく、ActionListener を実装する方法で実現せよ。