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()如果您使用而不是单独跟踪,它将简化您的代码numberOfAccounts,这将解决您的问题accounts.clear()

要匹配预期输出,请使用StringBuilder并附加到字符串以匹配排序:num 个帐户、循环余额、总余额,例如:

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

嘿,您有一个简单的逻辑错误,即 toString 方法中的 for 循环将仅执行 balance=a.getBalance(); 一行。因此,如果您想在 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 回答
0

首先,Person 类不应该有 balance 类字段;摆脱它。它把你弄乱了,因为每当你运行toString()这个 balance 字段时,它都会保留在toString()方法调用内部计算的值。然后,如果您再次调用该方法,您将重新将存储在变量中的旧余额添加到当前余额信息中,从而搞砸了您。

接下来,您需要在方法中的 for 循环之前添加一个新的 balance局部变量。然后,您可以在 for 循环内向其中添加单独的余额数据,并在 for 循环完成循环后打印出其内容。这样,它可以保存 ArrayList 中每个项目的信息,而不是像您的代码当前所做的那样继续保存和添加旧余额信息。toString()

于 2013-09-04T03:10:29.343 回答