1

我已经为此工作了几个小时,我觉得(我希望)我即将解决这个问题。这个程序从一个外部文件中读取一堆值,并将它们放在一个对象数组中,这似乎工作得很好。

对象属性是:
银行帐户 # 客户名称 银行帐户余额

1.我可以按照账号#的顺序输出(这是他们从文件中读取的方式,不需要排序)

2.我已经设置了一个方法,从实现 Comparable 到按银行账户余额排序,它工作正常。

3.我需要第二种排序方法,按客户名称排序。- 我遇到的问题是基于我所做的研究和我所尝试的我得出的结论是,完成这项工作的唯一方法是构建我自己的可比较对象(对不起,如果我的术语有偏差。)我也多次尝试过 Java Doc 和 SE 上的一些类似问题。

当一切都说完了,我将把一些监听器放入我的复选框组中,以允许用户切换不同的排序方法。

这是我正在处理的块:

 public class bankAccounts implements Comparable<bankAccounts> {
/* PRIVATE FIELDS HERE, FOLLOWED BY TYPICAL GET AND SET METHODS */

 /*SORTS BY ACCOUNT BALANCE WORKING GREAT*/
 public int compareTo(bankAccounts b)   {
    if (accountBalance < b.accountBalance)
    {
        return -1;
    }
    if (accountBalance > b.accountBalance)  {
        return 1;
    }
    return 0;
}


       /* BEGIN SNIPPET OF MAIN CLASS */


      /*METHOD I CALL FROM MAIN CLASS, SORTS BY BALANCE ^^ AS SEEN ABOVE */
Arrays.sort(retrievedAccounts);
for (int i=0; i<retrievedAccounts.length; i++)  {
    String resultFull = Integer.toString(retrievedAccounts[i].getAccountNumber()) + retrievedAccounts[i].getAccountLastName() + Double.toString(retrievedAccounts[i].getAccountBalance());
        box.append(resultFull + "\n");
}

/* NORMAL METHOD WHICH OUTPUTS IN ORDER OF ACCOUNT NUMBER, NO SORTING HAPPENING HERE */
        for(int x = 0; x < retrievedAccounts.length; ++x)
{
    String resultFull=Integer.toString(retrievedAccounts[x].getAccountNumber()) + retrievedAccounts[x].getAccountLastName() + Double.toString(retrievedAccounts[x].getAccountBalance());
    box.append("\n\n\n" + resultFull + "\n\n");
} 

我希望有人会对下一步有所了解,这可能会让我完成这项工作。如果您有建议采取完全不同的方向,我也对此持开放态度。

4

2 回答 2

0

使用Comparator<bankAccounts>比较对象名称并将其传递给Arrays.sort()方法的实现。

使用这样的匿名类:

Arrays.sort(retrievedAccounts, new Comparator<bankAccounts>() {
    public int compare(bankAccounts a, bankAccounts b) {
        return a.getName().compareTo(b.getName());
    }
});

此代码假定您有一个bankAccounts名为客户名称的 getter 方法getName()
您最好遵循 java 命名约定:

  • 类名以大写字母开头
  • 类名是单数,不是复数
于 2012-12-09T04:10:20.357 回答
0

这是一个未经测试的想法。

创建另一个私有方法来存储 compareType

public class bankAccounts implements Comparable<bankAccounts> {

private int compareType = 0; // 0 - compare by balance 1-compare by name

在您的比较方法中

public int compareTo(bankAccounts b)   {
if(this.compareType == 0){
if (accountBalance < b.accountBalance)
{
    return -1;
}
if (accountBalance > b.accountBalance)  {
    return 1;
}
return 0;
}else{
 return customerName.compareTo(b.customerName)
}
于 2012-12-09T04:12:49.120 回答