0

我是计算机编程的初学者,我正在使用 Java。对于我的家庭作业,我被指示根据以下规范创建一个通讯录:

  1. 首先,联系人被定义为元组:firstName、lastName、phoneNumber 和 email。

  2. 您将创建一个允许获取和设置这些变量的类 Contact 以及一个 toString() 方法和一个 equals() 方法。Contact 类应该实现 Comparable 接口。

  3. 您将使用静态方法创建一个类 ArrayOperation,该方法对实现 Comparable 接口的对象的一维数组进行排序

  4. 接下来,ContactBook 类应该能够搜索、创建和生成包含所有已排序联系人的字符串。

  5. 一个主类(随便你怎么称呼它)应该提供一个菜单,询问要创建多少个联系人,然后提供上面的三个选项。

  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 类的两个实例,但我无法在 compareTo 方法中使用“this.Contact”。
  • 最后,我对 compareTo() 方法返回 -1 和 1 时要比较的内容感到困惑。
4

2 回答 2

6

您需要 Comparable在类声明中使用泛型 for 来匹配您正在比较的对象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方法用于相等性检查(表示真或假),而不用于比较(表示小于、等于或大于)。

实现Comparable接口的目的是让您可以对对象进行排序,这不会正确地对对象进行排序。

于 2012-11-13T02:01:41.223 回答