2016-04-11 2 views
0

У меня есть учетная запись общественного класса, который я хочу реализовать с сопоставимыми и мой вопрос заключается в следующем:Открытый класс <Общий тип> реализует Сопоставимые

как я могу сделать, что учетная запись с наименьшим балансом является " самый маленький "в моем сравнении?.

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

Вы прочитали [docs] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo%28T%29) для этого метода? – resueman

+0

[Этот метод] (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#compare (double,% 20double)) может быть вам полезен. –

ответ

2

Метод compareTo должен возвращать:

  • отрицательное целое число, если это меньше, чем другой,
  • нулю, если это равно другой
  • положительное целое число, если это больше или прочие

Только что делает return this.balance - other.balance может давать недопустимые результаты, если значения вблизи Double.MAX_VALUE или Double.MIN_VALUE, так что вы должны использовать Double.compare:

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

Самый простой способ реализации является использование Double в качестве типа для balance и просто вызвать метод compareTo:

return balance.compareTo(other); 

Я не говоря, что это лучшее, но это достаточно хорошо для начала.

Обратите внимание, что обработка null s зависит от вас.

+0

Это не скомпилировалось. Это не то, как работает autoboxing. –

+0

@AndyTurner Это говорит, что используется 'Double'. Он не будет компилироваться, потому что 'other' не является« Double ». –

+0

@PaulBoddington не будет компилироваться, потому что 'balance' является' double', а не 'Double', и вы не можете вызывать' compareTo' на 'double'. –

Смежные вопросы