0

さて、もう 1 つ問題を解決する必要があります。私のハッシュマップコードは、追加/削除/変更/印刷/ソート(多少)を行います。並べ方の問題です。姓の昇順でソートされます。2 人の従業員の姓が同じ場合は、名の昇順に進みます。ただし、問題は、2 人の従業員の名前が同じ場合、ID 番号で並べ替える必要がありますが、そうではありません。

私のコード: 2 人の従業員の氏名が同じで ID 番号が異なる場合、ID 番号が小さい従業員のみを出力し、リストから他の従業員を省略します。問題は、どうすればそれを修正できるかということです。また、このコードを修正する必要がある場合、私の従業員ファイルは? これが私の従業員コードです。ヒント/リンク/アドバイスは役に立ちます。

public class Employee implements Comparable {
private String firstName; 
private String lastName;
private int id;
private int perfScale;

Employee() {
firstName = "";
lastName = "";
id = 0;
perfScale = 0;
}

Employee(String lastName, String firstName, int id, int perfScale){
this.firstName = firstName;
this.lastName = lastName;
this.id = id;
this.perfScale = perfScale;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public int getId() {
return id;
}
public void setId(int id){
this.id = id;
}
public int getPerfScale() {
return perfScale;
}
public void setPerfScale(int perfScale){
this.perfScale = perfScale;
}
public boolean equals(Object o) {
if(o instanceof Employee)
    return(getLastName() == ((Employee) o) .getLastName()) &&
        (getFirstName() == ((Employee)o) .getFirstName());
else
    return false;
}

public int compareTo(Object o) {
Employee e = (Employee) o;
int performance1 = e.getPerfScale();
int performance2 = this.getPerfScale();

if(performance1 < performance2) {
    return 1;

} else if(performance1 > performance2) {
    return -1;
} else {
    return this.getLastName().compareTo(e.getLastName());
}
}

public int hashCode() {
int h1 = firstName.hashCode();
int h2 = lastName.hashCode();
int h3 = new Integer(id).hashCode();
final int HASH_MULTIPLIER1 = 29;
final int HASH_MULTIPLIER2 = 19;
final int HASH_MULTIPLIER3 = 17;
int h = HASH_MULTIPLIER1 * h1 + HASH_MULTIPLIER2 * h2 + HASH_MULTIPLIER3 * h3;
return h;
}

public String toString()
{
    return getLastName() + ", " + getFirstName() + " ," + getId() + " rating: " +     getPerfScale()+ " Performance Scale";

}
    }

ここで、名前の昇順での並べ替えを処理する場合のコードを示します。コード全体は私が印刷したコードよりも長いので、ソートを生成するケースのみを印刷します。

public static void printLastNameAscending(TreeMap<String, Employee> LastName,
        TreeMap<Integer, Employee>idNumber) {
    Set Employee1 = LastName.entrySet();
    Set Employee2 = idNumber.entrySet();
    Iterator itr1 = Employee1.iterator();
    Iterator itr2 = Employee2.iterator();

    while (itr1.hasNext() && itr2.hasNext()) {
        Map.Entry me = (Map.Entry) itr1.next();
        Map.Entry be = (Map.Entry) itr2.next();
        System.out.print(me.getKey()+ " ID: ");
        System.out.println(be.getKey());
    }

}
4

1 に答える 1

1

ただし、問題は、2 人の従業員の名前が同じ場合、ID 番号で並べ替える必要がありますが、そうではありません。

あなたcompareToはID番号やファーストネームで何もしません。実際、最初にパフォーマンスを使用します。

私のコード: 2 人の従業員の氏名が同じで ID 番号が異なる場合、ID 番号が小さい従業員のみを出力し、リストから他の従業員を省略します。問題は、どうすればそれを修正できるかということです。また、このコードを修正する必要がある場合、私の従業員ファイルは? これが私の従業員コードです。ヒント/リンク/アドバイスは役に立ちます。

問題の関数を見てくださいequals: マップは、姓と名が同じ場合、2 人の従業員が同じであると見なします。関数を書き直してequals、employeeID も考慮に入れる必要があります。

于 2013-10-28T13:56:22.847 に答える