Java:实施可比较的问题
Java: Implementing Comparable Issue
我是新来的,正在寻找有关我的代码的建议。我正在尝试使 arrayList ArrayList<patient> heartPatientArray = new ArrayList<patient>(); //heart patients
能够在 patient's
arrivalTime
上进行排序。
代码:
class patient implements Comparable
{
int typeSickness; //1 for heart 2 for gastro 3 for bleeding
double arrivalTime; //what time they arrived SORT BY
int deathTime; // what time they are set to balk or die
int status; //0 for being cared for, 1 to n for location in line, -1 if dead
int personalNumberInLine; //personal number in line updated everytime someone enters the line
double timeSpentInQueue; //total time before they either died or were able to be treated
int idOfPerson; //unique id the person gets when entering the queue
boolean isAlive;
public patient(int sickness, double arrival, int ID) { //sets the patients sickness, time arrived, and ID
typeSickness=sickness;
arrivalTime=arrival;
idOfPerson = ID;
}
public int getTypeSickness() {
return typeSickness;
}
public void setTypeSickness(int typeSickness) {
this.typeSickness = typeSickness;
}
public double getArrivalTime() {
return arrivalTime;
}
public void setArrivalTime(double arrivalTime) {
this.arrivalTime = arrivalTime;
}
public int getDeathTime() {
return deathTime;
}
public void setDeathTime(int deathTime) {
this.deathTime = deathTime;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getNumberInLine() {
return personalNumberInLine;
}
public void setNumberInLine(int numberInLine) {
this.personalNumberInLine = numberInLine;
}
@Override
public int compareTo(patient one) {
if (this.getArrivalTime() < one.getArrivalTime()) {
return -1;
}
else if(this.getArrivalTime() > one.getArrivalTime()){
return 1;
}
return 0;
}
some code edited out for time's sake
我试过根据我在网上找到的一些代码来设计它的样式,但是我在 compareTo(patient one)
的 Remove Override Notation 上收到一个错误,在 class patient implements Comparable
上收到一个错误告诉我我必须class摘要。
正确实现 compareTo 后,我将如何对 heartPatientArray
进行排序?
您正在实现 Comparable
接口的 raw 形式。因此,compareTo
采用 Object
,这解释了为什么您在尝试实现接口时遇到错误。
相反,将您的 class 作为类型参数传递。
class patient implements Comparable<patient>
那么您的 compareTo
方法将按原样正确实施 Comparable<patient>
。
通常,Java 命名约定会说要将您的 class 姓名大写。
class Patient implements Comparable<Patient>
您可以使用以下方式对列表进行排序:
Collections.sort(heartPatientArray);
如果您想倒序排序,您可以指定:
Collections.sort(heartPatientArray, Comparator.reverseOrder());
通常,您可以通过传递 Comparator<Patient>
的实例来对其进行排序,实现 Comparator
的 compare
方法,注意将类型参数传递给 Comparable
就像我们现在为 Comparable
做的那样。然后将 Comparator<Patient>
的实例作为第二个参数传递给 Collections.sort
.
替换
class patient implements Comparable
和
class patient implements Comparable<patient>
否则您需要在 class 中实施 compareTo(Object o)
。
当您有 Comparable
class 的实例时,您可以将它们添加到 ArrayList
并使用方法 Collections.sort
.
所以,基本上您想要的是能够比较 2 个 patient
对象。现在,您可以比较 patient
和其他一些对象。为确保您只比较 patient
个对象,您需要更改
class patient implements Comparable
到
class patient implements Comparable<patient>
你的方法在任何方面都没有错(除了 compareTo
参数)。当然,您可以将 patient
与其他对象进行比较。如果你想那样做,
@Override
public int compareTo(Object obj) {
// you would want to see if the `Object` is of `patient` type
if( !(obj instanceof patient) )
return -1; // `obj` IS NOT OF TYPE `patient`; PICK YOUR RETURN VALUE; IDEALLY THROW AN EXCEPTION
patient one = (patient) o;
if (this.getArrivalTime() < one.getArrivalTime()) {
return -1;
}
else if(this.getArrivalTime() > one.getArrivalTime()){
return 1;
}
return 0;
}
然后调用Collections.sort(..)
什么的就可以排序了
我是新来的,正在寻找有关我的代码的建议。我正在尝试使 arrayList ArrayList<patient> heartPatientArray = new ArrayList<patient>(); //heart patients
能够在 patient's
arrivalTime
上进行排序。
代码:
class patient implements Comparable
{
int typeSickness; //1 for heart 2 for gastro 3 for bleeding
double arrivalTime; //what time they arrived SORT BY
int deathTime; // what time they are set to balk or die
int status; //0 for being cared for, 1 to n for location in line, -1 if dead
int personalNumberInLine; //personal number in line updated everytime someone enters the line
double timeSpentInQueue; //total time before they either died or were able to be treated
int idOfPerson; //unique id the person gets when entering the queue
boolean isAlive;
public patient(int sickness, double arrival, int ID) { //sets the patients sickness, time arrived, and ID
typeSickness=sickness;
arrivalTime=arrival;
idOfPerson = ID;
}
public int getTypeSickness() {
return typeSickness;
}
public void setTypeSickness(int typeSickness) {
this.typeSickness = typeSickness;
}
public double getArrivalTime() {
return arrivalTime;
}
public void setArrivalTime(double arrivalTime) {
this.arrivalTime = arrivalTime;
}
public int getDeathTime() {
return deathTime;
}
public void setDeathTime(int deathTime) {
this.deathTime = deathTime;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public int getNumberInLine() {
return personalNumberInLine;
}
public void setNumberInLine(int numberInLine) {
this.personalNumberInLine = numberInLine;
}
@Override
public int compareTo(patient one) {
if (this.getArrivalTime() < one.getArrivalTime()) {
return -1;
}
else if(this.getArrivalTime() > one.getArrivalTime()){
return 1;
}
return 0;
}
some code edited out for time's sake
我试过根据我在网上找到的一些代码来设计它的样式,但是我在 compareTo(patient one)
的 Remove Override Notation 上收到一个错误,在 class patient implements Comparable
上收到一个错误告诉我我必须class摘要。
正确实现 compareTo 后,我将如何对 heartPatientArray
进行排序?
您正在实现 Comparable
接口的 raw 形式。因此,compareTo
采用 Object
,这解释了为什么您在尝试实现接口时遇到错误。
相反,将您的 class 作为类型参数传递。
class patient implements Comparable<patient>
那么您的 compareTo
方法将按原样正确实施 Comparable<patient>
。
通常,Java 命名约定会说要将您的 class 姓名大写。
class Patient implements Comparable<Patient>
您可以使用以下方式对列表进行排序:
Collections.sort(heartPatientArray);
如果您想倒序排序,您可以指定:
Collections.sort(heartPatientArray, Comparator.reverseOrder());
通常,您可以通过传递 Comparator<Patient>
的实例来对其进行排序,实现 Comparator
的 compare
方法,注意将类型参数传递给 Comparable
就像我们现在为 Comparable
做的那样。然后将 Comparator<Patient>
的实例作为第二个参数传递给 Collections.sort
.
替换
class patient implements Comparable
和
class patient implements Comparable<patient>
否则您需要在 class 中实施 compareTo(Object o)
。
当您有 Comparable
class 的实例时,您可以将它们添加到 ArrayList
并使用方法 Collections.sort
.
所以,基本上您想要的是能够比较 2 个 patient
对象。现在,您可以比较 patient
和其他一些对象。为确保您只比较 patient
个对象,您需要更改
class patient implements Comparable
到
class patient implements Comparable<patient>
你的方法在任何方面都没有错(除了 compareTo
参数)。当然,您可以将 patient
与其他对象进行比较。如果你想那样做,
@Override
public int compareTo(Object obj) {
// you would want to see if the `Object` is of `patient` type
if( !(obj instanceof patient) )
return -1; // `obj` IS NOT OF TYPE `patient`; PICK YOUR RETURN VALUE; IDEALLY THROW AN EXCEPTION
patient one = (patient) o;
if (this.getArrivalTime() < one.getArrivalTime()) {
return -1;
}
else if(this.getArrivalTime() > one.getArrivalTime()){
return 1;
}
return 0;
}
然后调用Collections.sort(..)
什么的就可以排序了