我使用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
答案 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