目次へ

解答例 - 実習課題2 - 3.Set

(実習課題2)

以下のコンソールプログラムを作成しなさい。

  • 実習課題1で作成した人間を表すクラスに、「Comparable」インタフェースの実装および「Object」の「equals」「hashCode」メソッドのオーバーライドを行う事。比較方法は任意でよい。
  • 3つ以上、上記クラスのインスタンスを作成し、「compareTo」「equals」メソッドで比較した結果を表示する事。
  • またそれぞれのハッシュ値を表示する事。

解答例

package com.techscore.utility.chapter3.exercise2;

/**
 * ComparableHuman.java
 * TECHSCORE Javaユーティリティ3章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class ComparableHuman extends Human implements Comparable {

    public ComparableHuman(String name, int age) {
        super(name, age);
    }

    // 年齢を比較する。年齢が同じなら true を返す。
    public boolean equals(Object obj) {
	    if (this == obj) return true;
        if (!(obj instanceof ComparableHuman)) return false;
        ComparableHuman h = (ComparableHuman) obj;
        return (this.getAge() == h.getAge());
    }

    // 年齢を比較する。年齢差を返す。
    public int compareTo(Object obj) {
        return (this.getAge() - ((Human) obj).getAge());
    }

}
package com.techscore.utility.chapter3.exercise2;

/**
 * CompareExample.java
 * TECHSCORE Javaユーティリティ3章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class CompareExample {

    public static void main(String[] args) {

        // 比較に用いる人のオブジェクトを作成する。
        ComparableHuman taro = new ComparableHuman("太郎", 15);
        ComparableHuman hanako = new ComparableHuman("花子", 12);
        ComparableHuman jiro = new ComparableHuman("次郎", 13);

        System.out.println("-- compareTo() を用いて比較します --");
        doCompare(taro, taro);
        doCompare(taro, hanako);
        doCompare(taro, jiro);
        doCompare(hanako, taro);
        doCompare(hanako, hanako);
        doCompare(hanako, jiro);
        doCompare(jiro, taro);
        doCompare(jiro, hanako);
        doCompare(jiro, jiro);

        System.out.println();
        System.out.println("---- equal() を用いて比較します --");
        checkEqual(taro, taro);
        checkEqual(taro, hanako);
        checkEqual(taro, jiro);
        checkEqual(hanako, taro);
        checkEqual(hanako, hanako);
        checkEqual(hanako, jiro);
        checkEqual(jiro, taro);
        checkEqual(jiro, hanako);
        checkEqual(jiro, jiro);

    }

    // 二人を compareTo() で比較してメッセージを表示する。
    private static void doCompare(ComparableHuman a, ComparableHuman b) {
        if (a.compareTo(b) > 0) {
            System.out.println(a.getName() + "は" + b.getName() + "より年上です。");
        } else if (a.compareTo(b) < 0) {
            System.out.println(a.getName() + "は" + b.getName() + "より年下です。");
        } else {
            System.out.println(a.getName() + "と" + b.getName() + "は同い年です。");
        }
    }

    // 二人を equals() で比較してメッセージを表示する。
    private static void checkEqual(ComparableHuman a, ComparableHuman b) {
        if (a.equals(b)) {
            System.out.println(a.getName() + "と" + b.getName() + "は同い年です。");
        } else {
            System.out.println(
                a.getName() + "と" + b.getName() + "は同い年ではありません。");
        }
    }

}
package com.techscore.utility.chapter3.exercise2;

/**
 * Human.java
 * TECHSCORE Javaユーティリティ3章 実習課題2
 *
  * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class Human {

    private String name = null;
    private int age = 0;

    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return (name);
    }

    public int getAge() {
        return (age);
    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp