JAVA добавление всего

Я хотел бы, чтобы эта функция использовалась внутри другой функции. Что делает эта функция «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;
    }

person SungKeun Hong    schedule 13.05.2015    source источник
comment
я думаю, вы хотите, чтобы общая сумма возврата не учитывалась. это должно быть там, где возврат -2   -  person Dude    schedule 13.05.2015
comment
Вместо возврата int верните список int, содержащий все итоги.   -  person LisaMM    schedule 13.05.2015
comment
объявить int total = -2 первой строкой, последняя строка возвращает итог. Предпочтительно создать клиентский метод get, который будет выполнять первый цикл for   -  person Kenneth Clark    schedule 13.05.2015
comment
В качестве предложения по улучшению вашего метода вы можете захотеть окружить свой код блоком try-catch. Что произойдет, если ваш ClientList будет null? или если clientList.getClientList() возвращает null?   -  person Tavo    schedule 13.05.2015


Ответы (4)


Прежде всего, Эран решает вашу первоначальную проблему. Ваша проблема заключалась в том, что вы не суммировали суммы, вы сделали:

total = total;
return total;

Мое предложение для вас, когда у вас есть такой код:

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

создайте функцию в ClientList, которая получает целое число i и возвращает имя следующим образом:

public String getClientName(int i)

и вместо того, чтобы иметь длинный код выше, все, что вам нужно использовать, это:

clientList.getClientName(i)
person Eran    schedule 13.05.2015

Вы должны объявить переменную 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, вы можете сделать его еще короче:

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();
}
person Eran    schedule 13.05.2015
comment
@Eran Вы должны были исключить повторные вызовы вне цикла for: clientList.getClientList().get(i).getBankAccList(). - person Rajesh; 13.05.2015
comment
@Rajesh Да, есть много способов сделать этот метод более кратким, как показывает мое редактирование. - person Eran; 13.05.2015

Это решение возвращает общее значение вне цикла. Я не знаю, почему вы хотели вернуть -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;
                }
person Tom Jonckheere    schedule 13.05.2015
comment
Просто размещение куска кода не помогает вообще. Вы должны объяснить, что вы сделали для решения проблемы, чтобы ОП мог учиться у SO, а не просто заставить свою программу работать. - person 1Darco1; 13.05.2015
comment
@TomJonckheere, чувак, ты опубликовал только код. Я не знал, что вы редактируете сообщение, я имею в виду, что вы могли бы написать объяснение перед отправкой. Во всяком случае, теперь у вас есть объяснение. - person 1Darco1; 13.05.2015

Вам нужно взять общее объявление и оператор return за пределами внутреннего цикла for.

Замените внутренний цикл 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;
person Rajesh    schedule 13.05.2015
comment
SungKeun. Ваш код постоянно вызывает clientList.getClientList().get(i).getBankAccList(). Я предлагаю вам изменить его, как показано здесь. - person Rajesh; 13.05.2015