2016-04-11 8 views
0

Ich habe ein öffentliche Klasse Konto, die ich mit vergleichbaren implementieren will und meine Frage ist folgende:öffentliche Klasse <Allgemein type> implementiert Vergleichbare

wie kann ich machen, dass das Konto mit der niedrigsten Balance ist die " kleinste "in meinem Vergleich?.

public class Account implements Comparable<Account>{ 
    private double balance; 
    private String acctNum; 

    public Account(String number, double initBal){ 
     balance = initBal; 
     acctNum = number; 
    } 
    public double getBalance(){ 
     return balance; 
    } 
    ..... 


public int compareTo(Account other) { 
     ???????? 
    } 
+1

Haben Sie [die Dokumentation] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo%28T%29) für diese Methode gelesen? – resueman

+0

[Diese Methode] (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#compare (double,% 20double)) könnte für Sie hilfreich sein. –

Antwort

2

Die compareTo Methode muss zurückgeben:

  • eine negative ganze Zahl, wenn diese als andere weniger,
  • Null, wenn diese auf andere
  • eine positive ganze Zahl ist, wenn diese gleich oder größer ist als andere

Nur return this.balance - other.balance kann ungültige Ergebnisse geben, wenn die Werte sind in der Nähe von Double.MAX_VALUE oder Double.MIN_VALUE, so sollten Sie Double.compare verwenden:

public int compareTo(Account other) { 
    return Double.compare(this.balance, other.balance); 
} 
0

Die einfachste Art und Weise zu implementieren ist eine Double als Typ zu verwenden, für balance und rufen Sie einfach compareTo Methode:

return balance.compareTo(other); 

Ich bin nicht Ich sage, dass dies das Beste ist, aber es ist gut genug für einen Anfang.

Beachten Sie, dass die Handhabung null s Ihnen überlassen ist.

+0

Dies würde nicht kompilieren. So funktioniert Autoboxing nicht. –

+0

@AndyTurner Es heißt 'Double'. Es würde nicht kompilieren, weil "anderes" kein 'Double' ist. –

+0

@PaulBoddington würde es nicht kompilieren, weil 'balance' ein' double' ist, kein 'Double', und man kann' compareTo' nicht auf einem 'double' aufrufen. –

Verwandte Themen