0

私はコンピュータープログラミングの初心者で、Java を使用しています。宿題のために、次の仕様に従って連絡帳を作成するように指示されました。

  1. 最初に、連絡先が次のタプルとして定義されます: firstName、lastName、phoneNumber、および email。

  2. これらの変数の取得と設定を可能にする Contact クラス、および toString() メソッドと equals() メソッドを作成します。クラス Contact は Comparable インターフェースを実装する必要があります。

  3. Comparable インターフェイスを実装するオブジェクトの 1 次元配列を並べ替える静的メソッドを持つクラス ArrayOperation を作成します。

  4. 次に、ContactBook クラスは、並べ替えられたすべての連絡先を含む文字列を検索、作成、生成できる必要があります。

  5. メイン クラス (名前は何でも構いません) は、作成する連絡先の数を尋ねるメニューを提供し、次に上記の 3 つのオプションを提供する必要があります。

  6. 追加すると、ユーザーからの入力が収集され、メソッド ContactBook.addContact(Contact c) がその連絡先をメモリに保存します。

  7. ユーザーが検索している場合、プログラムはユーザーにすべての連絡先情報を尋ね、equals メソッドを使用して目的の連絡先を検索します。ユーザーが「q」を押すと、プログラムは終了します

Comparable インターフェースの実装に問題があります。これは私がこれまでに持っているものです:

public class Contact implements Comparable
{
  private String firstName, lastName, phoneNumber, email;

  public void setFirstName(String fName){firstName = fName;}
  public void setLastName(String lName){lastName = lName;}
  public void setPhoneNumber(String num){phoneNumber = num;}
  public void setEmail(String email){this.email = email;}

  public String getFirstName(){return firstName;}
  public String getLastName(){return lastName;}
  public String getPhoneNumber(){return phoneNumber;}
  public String getEmail(){return email;}

  public String toString()
  {
    return "First Name: " + firstName +
           "\nLast Name: " + lastName +
           "\nPhone Number: " + phoneNumber +
           "\nEmail: " + email;
  }

  public boolean equals(Contact cont)
  {
    return this.firstName.equals(cont.firstName) &&
           this.lastName.equals(cont.lastName) &&  
           this.phoneNumber.equals(cont.phoneNumber) &&
           this.email.equals(cont.email);
  }

  public int compareTo(Contact cont)
  {
    if(this.firstName.equals(cont.firstName) &&
           this.lastName.equals(cont.lastName) &&  
           this.phoneNumber.equals(cont.phoneNumber) &&
           this.email.equals(cont.email))
      return 0;
    return 1;
  }
}
  • コードをコンパイルするたびに、クラスが抽象である必要はないのに、クラスが抽象ではないというエラーがコンパイラに表示されます。
  • また、私は率直に言って、compareTo() メソッドで何をすべきかわかりません。Contact クラスの 2 つのインスタンスを比較したいのですが、compareTo メソッドで「this.Contact」を使用できません。
  • 最後に、compareTo() メソッドで -1 と 1 を返すときに何を比較するかについて混乱しています。
4

2 に答える 2

6

Comparableで比較しているオブジェクトと一致するように、クラス宣言でジェネリックを使用する必要があり compareToます。

public class Contact implements Comparable<Contact> {

また、メソッドでString.compareTo()を使用String.equals()しますcompareTo。これには多くの例があります。

于 2012-11-13T01:53:58.403 に答える
1

の実装はcompareTo意味がありません:

if(this.firstName.equals(cont.firstName) &&
       this.lastName.equals(cont.lastName) &&  
       this.phoneNumber.equals(cont.phoneNumber) &&
       this.email.equals(cont.email))
  return 0;
return 1;

intを返すのではなく、 (-1、0、または1の場合があります)を返すことを忘れないでくださいboolean.compareTo代わりに使用してください.equals.equalsメソッドは、同等性チェック(trueまたはfalseのいずれかを意味します)用であり、比較(より小さい、等しい、またはより大きいことを意味します)用ではありません。

インターフェイスを実装する目的はComparable、オブジェクトを並べ替えることができるようにすることです。これにより、オブジェクトが正しく並べ替えられなくなります。

于 2012-11-13T02:01:41.223 に答える