解答例 - 実習課題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);
}
}

