实现帮助介绍java

时间:2015-04-15 20:18:50

标签: java implementation

我对我的介绍课程中的实施有疑问。我想出了一个答案,但编译说"编译错误(第3行,第9列):可能会损失精度"我对这种精度的损失感到困惑。
 我的作业问题如下: 回想一下Person类实现了Comparable接口:

public class Person implements Comparable

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

对于此分配,通过为该类实现新的compareTo方法来修改Employee类。在下面提供的空白处输入相应的代码,如果员工A的工资低于员工B的工资,则员工A被视为低于员工B.此外,如果员工A的工资等于员工B的工资那么他们应该是平等的。请记住,您输入的代码位于Employee类中。

  /**
    * 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); 
    }

这是Employee类代码:

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( );
  }

}

非常感谢任何帮助我正确回答的帮助。我已经在这个单一的问题上工作了一个多小时,而且编译错误让我感到困惑不已。谢谢!

2 个答案:

答案 0 :(得分:4)

问题是compareTo方法必须返回int,但减去工资会产生double。 Java不允许您在没有强制转换的情况下隐式地将double转换为int。虽然演员阵容会得到编译代码,但结果可能是错误的。例如,0.4的差异将转换为int 0,错误地报告相等。

您可以测试工资小于,等于或大于,并分别返回-1,0或1。您还可以返回调用Double.compare的结果,并传递2个工资。

如果您是初学者,那么您可能不会意识到Comparable interface通常是通用的,并且通过提供类型参数来实现。在这种情况下,这回答了“可以与什么相比”的问题。 compareTo方法的参数是通用的,因此它采用相同的类型。这也避免了需要在方法体中将obj强制转换为Person

public class Person implements Comparable<Person>

public int compareTo(Person obj) 

答案 1 :(得分:2)

我相信精度的损失是因为你在一对双精度上执行算术并返回结果,但是你的方法头被声明为返回一个int。

尝试投射减法:

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); 
}