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