0

toString メソッドを使用して配列リストにデータを表示しています。口座数、各口座の残高、合計残高を出力するために必要です。私のループが間違った/間違った場所で使用されていることはほぼ確実です。しかし、私はそれを修正する方法を理解できません。また、accounts.clear() を使用すると、合計残高がクリアされますが、アカウント数は同じままで、別のループが必要ですか? 皆様のご協力をよろしくお願いいたします。

This is my Account Class:
package prob2;
public class Account {

     double balance;

public void deposit(double amount) {
    balance = balance + amount;
}

public void withdraw(double amount) {
    balance = balance - amount;
}

public void addInterest () {
    balance += (balance - 1000)*.01;
}

public double getBalance() {
    return balance;
}

}

そして、ここに私の Person クラスがあります

package prob2;

import java.util.ArrayList;

public class Person {
    ArrayList<Account> accounts = new ArrayList<Account>();
    //int numberOfAccounts = 0;
    double sum;
    double balance;


public void addAccount(Account a){
    //numberOfAccounts++;
    accounts.add(a);
}

public Account getAccount (int i) {
    return accounts.get(i);
}

public int getNumAccounts() {
    return accounts.size();

}

public double getTotalBalance() {
    double sum = 0;
    for (Account a: accounts)
        sum = sum + a.getBalance();
    return sum;
}

public void applyInterest() {
    for (Account a: accounts)
        a.addInterest();
}
public void removeAccount(int i) {
    accounts.remove(i);
    //numberOfAccounts--;
}

public void depositFunds(int i, double amount) {
    getAccount(i).deposit(amount);
}

public void withdrawFunds(int i, double amount) {
    getAccount(i).withdraw(amount);
}

public void clearAccounts() {
    accounts.clear();
}


public String toString() {

    StringBuilder sb = new StringBuilder();
    sb.append(String.format("Number of accounts: %d%n", accounts.size()));
    for (Account a: accounts)
        sb.append(String.format("Balance: %d%n", a.getBalance()));
    // call sb.append in your for loop
    sb.append(String.format("Total balance: %d%n", getTotalBalance()));
    return sb.toString(); 

}

}

出力は次のようになります:
Num Accounts: 3

バル = 2234.34

バル = 4523.29

バル = 45.62

合計残高 = 6803.25

4

4 に答える 4

1

個別にaccounts.size()追跡するのではなく、使用するとコードが簡素化され、 .numberOfAccountsaccounts.clear()

予想される出力と一致させるには、StringBuilderを使用し、文字列に追加して順序を一致させます: 口座数、ループの残高、合計残高。次に例を示します。

StringBuilder sb = new StringBuilder();
sb.append(String.format("Number of accounts: %d%n", accounts.size());
// call sb.append in your for loop
sb.append(String.format("Total balance: %d%n", totalBalance);
return sb.toString();

上記の例では、出力をフォーマットする別の方法を示すためにString.format 構文を使用しました。

于 2013-09-04T03:18:23.790 に答える
0

まず、Person クラスにはバランス クラス フィールドがあってはなりません。それを取り除くだけです。toString()この残高フィールドを実行するたびに、toString()メソッド呼び出し内で計算された値が保持されるため、混乱します。次に、メソッドを再度呼び出すと、変数に保存されている古い残高が現在の残高情報に再度追加され、めちゃくちゃになります。

次に、メソッドの for ループの前に新しいバランスのローカル変数が必要です。次に、for ループ内で個々の残高データを追加し、for ループがループを完了した後にその内容を出力できます。そうすれば、ArrayList 内の各項目からの情報を保持でき、コードが現在行っているように古い残高情報を保持したり追加したりしません。toString()

于 2013-09-04T03:10:29.343 に答える
0

toString メソッドの for ループは、balance=a.getBalance(); という 1 行だけを実行するという単純な論理的な間違いがあります。したがって、 for ループ内に他の行を追加する場合は、この { } の間にコードを挿入します

于 2013-09-05T02:42:59.293 に答える
0

ちょっとここに変更された toString メソッドのコードがあります。戻り型 String を使用する代わりに、String[] を使用して複数の文字列を int count=0; public String[] toString() { double balance = 0; String s[]=new String[accounts.size()]; for (Account a: accounts) { balance = a.getBalance(); String result; result = ""+balance; s[count]=result; count++; } return s; } 格納します。つまり、toString メソッドから返された文字列配列を出力できます。 public void showDetails(String[] input) { System.out.println("Num Accounts: "+accounts.size()); String result=toString(): for(int i=0;i<result.length;i++) System.out.println("Balance :- "+result[i]); System.out.println("\nTotal Balance: " + getTotalBalance()); } それがすべてです

于 2013-09-05T03:55:25.947 に答える