我尝试在BankAccounts的数组列表上实现类似的接口,但是当我尝试编译并运行测试器类的main方法时,我遇到了重大错误,特别是关于Collection.sort(list)行。它说它无法识别语法..在线查看并通过javadoc找不到我错的地方..
public class BankAccount implements Comparable { //QUESTION 2.1
/**
A bank account has a balance that can be changed by
deposits and withdrawals.
*/
private int accountNumber;
private double balance;
/**
Constructs a bank account with a zero balance
@param anAccountNumber the account number for this account
*/
public BankAccount(int anAccountNumber)
{
accountNumber = anAccountNumber;
balance = 0;
}
/**
Constructs a bank account with a given balance
@param anAccountNumber the account number for this account
@param initialBalance the initial balance
* /
public BankAccount(int anAccountNumber,double initialBalance)
{
accountNumber = anAccountNumber;
balance = initialBalance;
}
/**
Gets the account number of this bank account.
@return the account number
*/
public int getAccountNumber()
{
return accountNumber;
}
/**
Deposits money into the bank account.
@param amount the amount to deposit
*/
public void deposit(double amount)
{
double newBalance = balance + amount;
balance = newBalance;
}
/**
Withdraws money from the bank account.
@param amount the amount to withdraw
*/
public void withdraw(double amount)
{
double newBalance = balance - amount;
balance = newBalance;
}
/**
Gets the current balance of the bank account.
@return the current balance
*/
public double getBalance()
{
return balance;
}
public int compareTo (BankAccount temp) {
if (balance<temp.balance)
return -1;
if (balance==temp.balance)
return 0;
return 1;
}
}
public class TestSortedBankAccounts {
public static void main(String[] args) {
// Put bank accounts into a list
ArrayList<BankAccount> list = new ArrayList<BankAccount>();
BankAccount ba1 = new BankAccount(100, 500); //Constructor acctNumber and balance
BankAccount ba2 = new BankAccount(200, 10000);
BankAccount ba3 = new BankAccount(300, 400);
BankAccount ba4 = new BankAccount(600, 0);
BankAccount ba5 = new BankAccount(800, 50);
list.add(ba1);
list.add(ba2);
list.add(ba3);
list.add(ba4);
list.add(ba5);
// Call the library sort method
Collections.sort(list);
// Print out the sorted list
for (int i = 0; i < list.size(); i++) {
BankAccount b = list.get(i);
System.out.println(b.getBalance());
}
}
}
更新:TestSortedBankAccounts.java:26:错误:找不到合适的排序方法(ArrayList) Collections.sort(名单); ^ 方法Collections.sort(List,Comparator)不适用 (无法从参数实例化,因为实际和形式参数列表的长度不同) 方法Collections.sort(List)不适用 (推断类型不符合声明的界限) 推断:BankAccount bound(s):可比较) 其中T#1,T#2是类型变量: T#1扩展了在方法排序中声明的Object(List,Comparator) T#2扩展了方法排序(List)中声明的Comparable 1错误
答案 0 :(得分:4)
您正在实施Comparable
的原始版本。您应该实现Comparable
的通用形式:
public class BankAccount implements Comparable<BankAccount> {
如果您实施原始表单,则compareTo
上的参数类型将为Object
。使用通用表单,您可以将泛型类型参数作为参数提供给compareTo
,如您所知。
答案 1 :(得分:0)
我的回答(我已尝试并且有效):
public class BankAccount implements Comparable<Object> { // <--
/**
A bank account has a balance that can be changed by
deposits and withdrawals.
*/
private int accountNumber;
private double balance;
/**
Constructs a bank account with a zero balance
@param anAccountNumber the account number for this account
*/
public BankAccount(int anAccountNumber)
{
accountNumber = anAccountNumber;
balance = 0;
}
/**
Constructs a bank account with a given balance
@param anAccountNumber the account number for this account
@param initialBalance the initial balance
*/
public BankAccount(int anAccountNumber, double initialBalance) {
accountNumber = anAccountNumber; balance = initialBalance; }
/**
Gets the account number of this bank account.
@return the account number
*/
public int getAccountNumber()
{
return accountNumber;
}
/**
Deposits money into the bank account.
@param amount the amount to deposit
*/
public void deposit(double amount)
{
double newBalance = balance + amount;
balance = newBalance;
}
/**
Withdraws money from the bank account.
@param amount the amount to withdraw
*/
public void withdraw(double amount)
{
double newBalance = balance - amount;
balance = newBalance;
}
/**
Gets the current balance of the bank account.
@return the current balance
*/
public double getBalance()
{
return balance;
}
// public int compareTo (BankAccount temp) { // <-- WRONG
public int compareTo(Object temp){ // <-- RIGHT
BankAccount other = (BankAccount)temp; // <-- Cast to BankAccount
if (balance<other.balance)
return -1;
if (balance==other.balance)
return 0;
return 1;
}
}