实现Comparable Interface作业

时间:2012-11-13 01:51:00

标签: java

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

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

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

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

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

  5. 主要课程(无论你想要什么)都应该提供一个菜单,询问要创建多少联系人,然后提供上述三个选项。

  6. 添加时,会收集用户的输入,并且ContactBook.addContact(Contact c)方法会将该联系人存储在内存中。

  7. 如果用户正在搜索,程序会询问用户所有联系信息,并使用equals方法搜索所需的联系人。当用户按下“q”

  8. 时程序退出

    我无法实现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”。
    • 最后,我对返回-1和1时要比较的内容感到困惑 对于compareTo()方法。

2 个答案:

答案 0 :(得分:6)

您需要在类声明中使用Comparable的泛型来匹配您在compareTo中比较的对象:

public class Contact implements Comparable<Contact> {

String.equals()方法中使用String.compareTo()而不是compareTo。有many examples这个。

答案 1 :(得分: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接口的目的是为了对对象进行排序,而不是对对象进行正确排序。