2016-04-06 7 views
0

私はここに新しいですし、私のコードのいくつかの助言を探していた。配列リストArrayList<patient> heartPatientArray = new ArrayList<patient>(); //heart patientsを並べ替えることができるようにしようとしていますpatient'sarrivalTimeJava:同等の問題を実装する

コード:

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)上のエラーを取得し、class patient implements Comparable占いのエラーです私は授業を抽象的にする必要があります。

compareToを正しく実装したら、どうすればheartPatientArrayをソートすることができますか?

+0

生の種類は何ですか? ( 'Comparable 'はジェネリック型です。) – Savior

答えて

2

フォームのComparableインターフェイスを実装しています。このため、compareToにはObjectが含まれているため、インターフェイスを実装しようとするとエラーが発生する理由が説明されています。

代わりに、クラスを型パラメータとして渡します。

class patient implements Comparable<patient> 

次に、あなたのcompareTo方法は、そのまま、適切Comparable<patient>を実装します。

通常、Javaの命名規則では、クラス名を大文字にすると言われています。

class Patient implements Comparable<Patient> 

あなたはとあなたのリストを並べ替えることができます:あなたが逆の順序でそれをソートしたい場合は、あなたがそれを指定することができ

Collections.sort(heartPatientArray); 

:一般的に

Collections.sort(heartPatientArray, Comparator.reverseOrder()); 

を、あなたはしかし、Comparator<Patient>のインスタンスを渡してComparatorcompareメソッドを実装し、タイプパラメータをに渡すように注意して、ソートすることができます私たちは今、Comparableのためにやっているようです。次に、Comparator<Patient>のインスタンスを第2引数としてCollections.sortに渡します。

+0

オハイオは今、 '@ Override'が必要ですか? –

+0

'@ Override'は必要ありませんが、実際にオーバーライド/実装することなくメソッドをオーバーライド/実装しようとする試みをキャッチします。 – rgettman

0

そうでない場合、あなたのクラスでcompareTo(Object o)を実装する必要が

class patient implements Comparable<patient> 

class patient implements Comparable 

を交換してください。

Comparableクラスのインスタンスがある場合は、ArrayListに追加して、Collections.sortというメソッドを使用します。

+0

大文字で始まるクラス名でさえ、悪い考えではありません。 – maxvv

+0

オハイオ州オハイオ州私は今理解する! '@ Override'が必要ですか?何らかの理由でそれでも私にエラーが出ています。 –

0

基本的には、2 patientのオブジェクトを比較することができます。今のところ、patientと他のオブジェクトとを比較することができます。あなただけpatientオブジェクトを比較していることを、確実にするために、あなたはすでにダウンしてい方法は(compareToのparamを除く)どのような方法で間違っていない

class patient implements Comparable<patient> 

class patient implements Comparable 

を変更する必要があります。もちろん、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(..)か何かを呼び出すことによって、それを並べ替えることができます。