Java 实现可比较的接口作业

Java 实现可比较的接口作业,java,Java,我是计算机编程的初学者,我正在使用Java。 对于我的家庭作业,我被指示根据以下规范创建一个联系簿: 首先,联系人被定义为元组:firstName、lastName、phoneNumber和email 您将创建一个允许获取和设置这些变量的类联系人,以及一个toString方法和一个equals方法。类联系人应实现可比较的接口 您将使用静态方法创建一个类ArrayOperation,该方法对实现可比较接口的一维对象数组进行排序 接下来,ContactBook类应该能够搜索、创建和生成包含所有已排序

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

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

您将创建一个允许获取和设置这些变量的类联系人,以及一个toString方法和一个equals方法。类联系人应实现可比较的接口

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

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

主类可以随意调用它,它应该提供一个菜单,询问要创建多少联系人,然后提供上述三个选项

添加时,将收集来自用户的输入,方法ContactBook.addContactContact c将该联系人存储在内存中

如果用户正在搜索,程序会要求用户提供所有联系人信息,并使用equals方法搜索所需联系人。当用户按q时,程序退出

我在实现可比较的接口时遇到问题。 这就是我到目前为止所做的:

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方法做什么。我 想要比较我的联系人类的两个实例,但我无法 在compareTo方法中使用此.Contact。 最后,我对返回-1和1时要比较什么感到困惑 用于比较方法。
您需要在类声明中使用泛型for Comparable来匹配要在compareTo中进行比较的对象:


在compareTo方法中也使用over String.equals。这其中有很多原因。

您对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,而不是布尔值。使用.compareTo,而不是.equals。equals方法用于相等检查,表示true或false,而不用于比较,表示小于、等于或大于


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

可比接口是什么样子?@SeanF,一个联系人比另一个联系人“大”意味着什么?是否应该按名称的字母顺序排序?该类是抽象的,因为如果不使用泛型来限制对象的可比较性,则必须提供compareToObject。
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;