我想在另一个函数中使用此函数。 这个“addTotal”函数的作用是返回某个客户端拥有的每个bankAccount的总余额。 我知道插入“返回总数”;声明,它只获得第一个bankAccount余额。 对此有何建议?
private int addTotal(ClientList clientList, String name)
{
for(int i = 0 ; i<clientList.getClientList().size();i++)
{
if(name.compareTo(clientList.getClientList().get(i).getName())==0)
{
for(int j =0;j<clientList.getClientList().get(i).getBankAccList().size();j++)
{
int total = clientList.getClientList().get(i).getBankAccList().get(j).showBalance();
total+=total;
return total; // i know here is the problem. any suggestion on this?
}
}
}
return -2;
}
答案 0 :(得分:6)
您应该在方法的开头声明total
变量,并在循环结束时返回它:
private int addTotal(ClientList clientList, String name)
{
int total = 0;
for(int i = 0 ; i<clientList.getClientList().size();i++) {
if(name.compareTo(clientList.getClientList().get(i).getName())==0) {
for(int j =0;j<clientList.getClientList().get(i).getBankAccList().size();j++) {
total+=clientList.getClientList().get(i).getBankAccList().get(j).showBalance();
}
}
}
return total;
}
编辑:
通过引入局部变量,您可以使代码更具可读性:
private int addTotal(ClientList clientList, String name)
{
int total = 0;
for(int i = 0 ; i<clientList.getClientList().size();i++) {
Client client = clientList.getClientList().get(i);
if(name.compareTo(client.getName())==0) {
for(int j =0;j<client.getBankAccList().size();j++) {
total+=client.getBankAccList().get(j).showBalance();
}
}
}
return total;
}
甚至更好,通过使用增强的for循环(我对你的类的名称做了一些猜测):
private int addTotal(ClientList clientList, String name)
{
int total = 0;
for(Client client : clientList.getClientList()) {
if(name.compareTo(client.getName())==0) {
for(BankAccount acct : client.getBankAccList()) {
total+=acct.showBalance();
}
}
}
return total;
}
通过使用Java 8 Streams,您可以缩短它:
private int addTotal(ClientList clientList, String name)
{
return clientList.getClientList()
.stream()
.filter(c -> name.compareTo(c.getName())==0)
.flatMap(c -> c.getBankAccList().stream())
.mapToDouble(BankAccount::showBalance)
.sum();
}
答案 1 :(得分:1)
此解决方案返回循环外部的总数。我不知道你为什么想要返回-2,但是如果它还需要你可以调整代码。
private int addTotal(ClientList clientList, String name)
{
int total =0;
for(int i = 0 ; i<clientList.getClientList().size();i++)
{
if(name.compareTo(clientList.getClientList().get(i).getName())==0)
{
for(int j =0;j<clientList.getClientList().get(i).getBankAccList().size();j++)
{
total+= clientList.getClientList().get(i).getBankAccList().get(j).showBalance();suggesti
}
}
}
return total;
}
答案 2 :(得分:0)
首先,Eran解决了你原来的问题。 你的问题是你没有总结金额,你做了:
"CREATE_COMPLETE"
我建议您使用这样的代码:
total = total;
return total;
在ClientList中创建一个函数,它获取一个整数i并返回如下名称:
clientList.getClientList().get(i).getName()
而不是上面的长代码,你只需要使用:
public String getClientName(int i)
答案 3 :(得分:0)
你需要在inner for循环之外采用total声明和return语句。
用以下行替换你的内部for循环:
client_BankAccList = clientList.getClientList().get(i).getBankAccList();
int total = 0;
for(int j = 0; j < client_BankAccList.size(); j++)
{
total += client_BankAccList.get(j).showBalance();
}
return total;