当前位置: 首页 > 知识库问答 >
问题:

JAVA添加总计

徐文彬
2023-03-14

我希望在另一个函数中使用此函数。这个“addTotal”函数的作用是返回某个客户的每个银行账户的总余额。我通过插入“return total对账单,它只获取第一个银行账户的余额。对此有什么建议吗?

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;
    }

共有3个答案

谭京
2023-03-14

首先,Eran解决了你最初的问题。你的问题是你没有总结金额,你做了:

total = total;
return total;

我对你的建议是当你有这样的代码时:

clientList.getClientList().get(i).getName()

在ClientList中创建一个函数,该函数获取一个整数i并返回名称,如下所示:

public String getClientName(int i)

取而代之的是上面的长代码,您所要使用的就是:

clientList.getClientName(i)
壤驷德寿
2023-03-14

这个解决方案返回循环之外的总数。我不知道你为什么要返回-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;
                }
韶英达
2023-03-14

您应该在方法的开头声明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;
}

通过使用Java8 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();
}
 类似资料:
  • 问题内容: 如何在交叉表中添加总计的另一行和一列? 我以为我会添加新列(通过对行求和而获得) 但这不起作用。 问题答案: 这是因为“类似属性”的列访问不适用于整数列名。使用标准索引: 请参阅文档本节末尾的警告:http : //pandas.pydata.org/pandas- docs/stable/indexing.html#attribute-access 当您要使用行时,可以使用: 在这种

  • 一个存储容器中大约有500万条记录。我需要在一个集合对象中获取它们。我得到了下面的列表: 预期结果(需要计算特定“版本”的总大小): “Java”的总尺寸示例: "56" "58" "46" "56" "29"="245" 如何使用Java 8实现这一点?

  • 我正在创建Jenkins管道,用于在Docker容器上运行terraform。 注意,我使用--entrypoint=/bin/bash将入口点覆盖到/bin/bash,因为hashiCorp/terraform:full已经定义了一个入口点。

  • 考虑以下方法: 尤其是这两条线: 如果线程A进入synchronized块并获得当前对象的锁,这是否意味着该对象的实例属性的状态不能被synchronized块之外的其他线程改变(当线程A在synchronized块中时)? 例如,线程A执行了第1行- 消息是非静态同步列表 UPD:更新的方法,可能的解决方案: addLock - AtomicBoolean,默认为false

  • 问题内容: 我已经看到了几种有神论的方法,它们似乎都起作用,但是我只是想知道一种方法是否比另一种更好。 例如,一个叫你可以这样做: 您还可以执行以下操作: 这些“正确”之一吗? 问题答案: 来自类javadoc的文字副本 JFrame类与Frame略有不兼容。像所有其他JFC / Swing顶级容器一样,JFrame包含JRootPane作为其唯一的子级。根窗格提供的内容窗格通常应包含JFrame

  • 错误:无法初始化主类com.companyname.bank.App,原因是:java.lang.NoClassDefFoundError:org/apache/http/client/ResponseHandler 我在pom.xml文件中添加了依赖项,在/src/lib中也添加了相关的.jar文件之后,这个报告一直出现。真的很困惑,不知道怎么解决。 请帮我一把。谢谢。 以下是我的操作流程: >