使用toString方法显示帐户信息并使用arraylist.clear

时间:2013-09-04 03:03:45

标签: java arraylist tostring

我使用toString方法在arraylist中显示数据。我需要打印出来    帐户数量,每个帐户的余额和总余额。我几乎可以肯定我的循环使用错误/错误的位置。但我无法弄清楚如何解决它。当时 我使用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

bal = 2234.34

bal = 4523.29

bal = 45.62

总余额= 6803.25

4 个答案:

答案 0 :(得分: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 syntax只是为了显示另一种格式化输出的方法。

答案 1 :(得分:0)

首先,Person类不应该有一个balance class字段;只是摆脱它。这让你感到困惑,因为无论何时运行toString(),此余额字段都会保留在toString()方法调用内计算的值。然后,如果再次调用该方法,则会将存储在变量中的旧余额重新添加到当前余额信息中,从而弄乱您。

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

答案 2 :(得分:0)

嘿,你有一个简单的逻辑错误,toString方法中的for循环只执行一行balance = a.getBalance();因此,如果你想在内部添加其他内部循环,请将代码放在此{}

之间

答案 3 :(得分: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()); }  那就是 VOTE UP