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)
我对入门课程的实施有疑问。我想出了一个答案,但汇编说 "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)