2016-04-11 1 views
0

J'ai un compte de la classe publique que je veux mettre en œuvre avec comparables et ma question est la suivante:Classe publique <type générique> implémente Comparable

comment puis-je faire que le compte avec le solde le plus bas est le " plus petit "dans ma comparaison?.

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

Avez-vous lu [les documents] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo%28T%29) pour cette méthode? – resueman

+0

[Cette méthode] (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#compare (double,% 20double)) peut vous être utile. –

Répondre

2

Le procédé compareTo doit retourner:

  • un entier négatif si cela est inférieur à l'autre,
  • zéro si elle est égale à d'autres
  • un nombre entier positif si cette ou supérieure à autre

Le simple fait de return this.balance - other.balance peut donner des résultats invalides si les valeurs sont près Double.MAX_VALUE ou Double.MIN_VALUE, vous devez donc utiliser Double.compare:

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

La façon de mettre en œuvre plus simple est d'utiliser un Double comme type pour balance et simplement appeler compareTo méthode:

return balance.compareTo(other); 

Je ne suis pas dire que c'est le meilleur mais c'est assez bon pour commencer.

Notez que la gestion de null est à vous de mettre en œuvre.

+0

Cela ne compilerait pas. Ce n'est pas comme ça que ça fonctionne. –

+0

@AndyTurner Il dit utiliser 'Double'. Il ne compilerait pas parce que 'other' n'est pas un' Double'. –

+0

@PaulBoddington il ne compilera pas parce que 'balance' est un' double', pas un 'Double', et vous ne pouvez pas invoquer' compareTo' sur un 'double'. –