1

私はこれに数時間取り組んできましたが、私はそれを理解する寸前にいると感じています (願っています)。このプログラムは、外部ファイルから一連の値を読み取り、正常に機能しているように見えるオブジェクトの配列に配置します。

オブジェクトのプロパティは次のとおりです。
銀行口座番号 顧客名 銀行口座残高

1.アカウント番号順に出力できます(これがファイルからの読み取り方法であり、並べ替えは必要ありません)

2. Comparable を実装して銀行口座残高でソートする方法をセットアップしましたが、問題なく動作しています。

3.顧客名で並べ替えるための 2 番目の並べ替え方法が必要です。- これに関して私が抱えている問題は、私が行った調査と私が試したことに基づいています。これを機能させる唯一の方法は、独自の比較可能なオブジェクトを構築することであるという結論に達しました (申し訳ありませんが、私の用語は歪んでいます。) 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 に答える