JAVA总计

时间:2015-05-13 08:09:12

标签: java return totals

我想在另一个函数中使用此函数。 这个“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;
    }

4 个答案:

答案 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;