java 的实施帮助介绍

Implementation help intro to java

我对入门课程的实施有疑问。我想出了一个答案,但汇编说 "compilation error (line 3, column 9) : possible loss of precision" 我对这种精度损失是什么感到困惑。
我的作业问题如下: 回想一下 Person class 实现了 Comparable 接口:

public class Person implements Comparable

现在假设我们要比较员工的薪水。由于 Employee 扩展了 Person,Employee 已经通过 Person compareTo 方法实现了 Comparable,该方法按年龄比较 Person 对象。现在我们要覆盖 Employee class 中的 compareTo 方法,以便进行薪水比较。

对于此作业,通过为该 class 实施新的 compareTo 方法来修改 Employee class。在下面提供的 space 中输入适当的代码,如果员工 A 的薪水低于员工 B 的薪水,则员工 A 被视为低于员工 B。此外,如果员工 A 的薪水等于员工B的,那么他们应该是平等的。请记住,您输入的代码位于 Employee class.

  /**
    * Compares this object with the specified object for order.
    * @param o the Object to be compared.
    */
    public int compareTo(Object obj) 
    {

这是我的代码

    double b= ((Employee)obj).getSalary();
    double a= this.salary;
    return(a-b); 
    }

这是员工 class 代码:

class Employee extends Person
{

     private double salary;

     /**
  * constructor with five args.
  * @param n the name
  * @param ag the age
  * @param ht the height
  * @param p the phone number
  * @param the salary
  */
  public Employee(String n, int ag, int ht, String p, double s)
  {
    super( n, ag, ht, p );
    salary = s;
  }

  /**
   * Get the salary.
   * @return double the salary.
   */
  public double getSalary( )
  {
    return salary;
  }

  /**
   * Raise the employee's salary by a given percent.
   * @param percentRaise
   */
  public void raise(double percentRaise)
  {
    salary *= ( 1 + percentRaise );
  }

    /**
     * Compares this object with the specified object for order.
     * @param o the Object to be compared.
     */
    public int compareTo(Object obj) 
    {
  /* your code goes here */
    }

  /**
    * get a String representation of the employee's data.
    * @return String the representation of the data.
    */
  public String toString( )
  {
    return super.toString( ) + " $" + getSalary( );
  }

}

如果能帮助我正确回答,我将不胜感激。我已经研究这个单一问题一个多小时了,那个编译错误让我百思不得其解。谢谢!

我认为精度损失是因为您正在对一对双精度数执行算术运算并 return 计算结果,但是您的方法 header 被声明为 return诠释。

试试你的减法:

public int compareTo(Object obj) 
{
    double b= ((Employee)obj).getSalary();
    double a= this.salary;
    return (int) (a-b); 
}

但是,由于您的意图似乎是对薪水进行比较,请尝试这样的操作:

public int compareTo(Object obj) 
{
    double b= ((Employee)obj).getSalary();
    double a= this.salary;
    return Double.compare(a, b); 
}

问题是 compareTo 方法必须 return 一个 int,但是减去工资会得到 double。 Java 不会让您隐式地将 double 转换为 int 而不进行强制转换。虽然强制转换会使代码编译,但结果可能是错误的。例如,差异 0.4 将转换为 int 作为 0,错误地报告相等。

您可以分别测试薪水小于、等于或大于,以及 return -1、0 或 1。您还可以 return 调用 Double.compare 的结果,传递 2 个薪水。

如果您是初学者,那么您可能不知道通常 Comparable interface 是泛型的,并且是通过提供类型参数来实现的。在本例中,这回答了问题 "Comparable to what?"。 compareTo 方法的参数是通用的,所以它采用相同的类型。这也避免了需要在方法主体中将 obj 转换为 Person

public class Person implements Comparable<Person>

public int compareTo(Person obj)