Как вы бросаете исключение, не прерывая цикл? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть чрезвычайно простая функция, которая ищет ArrayList в CustomerAccount и возвращает учетные записи, соответствующие аргументу regNum.Однако, как только выдается исключение CustomerAccountNotFoundException, мои разрывы цикла for.

public CustomerAccount findCustomer(String regNum) throws CustomerNotFoundException
{
    CustomerAccount customer = null;
    for (int i=0; i < accounts.size(); i++)
    {
        if(regNum.equals(accounts.get(i).getCustomerVehicle().getRegistration()))
        {
            customer = accounts.get(i);
        }
        else
        {
            throw new CustomerNotFoundException();
        }
    }
    return customer;
}

Я проверил это, напечатав значение i после исключения, которое продолжает сбрасываться в 0. Как можноЯ продолжаю цикл после того, как Исключение брошено?Я хочу, чтобы он выбрасывался каждый раз, когда учетная запись не совпадает, и учетная запись возвращается, когда это происходит.Я также попробовал continue;, который не работает.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Вы не можете выбросить несколько исключений из метода после его вызова один раз.

Как только выброшено исключение, вы выходите из области действия, поэтому не можете затем выбросить другое.

Что вы можете сделать вваш конкретный случай - это исключение, если в конце вашего цикла значение client равно нулю.

0 голосов
/ 25 апреля 2018

Удалите исключение CustomerNotFoundException из класса throws. Поймайте исключение только в блоке else, так как оно кажется бесполезным, и добавьте continue после перехвата исключения.Не понятно использование броска исключения, так как вы все еще хотите продолжить цикл.Создание исключения в вашем коде вернет родительский метод.

0 голосов
/ 25 апреля 2018

Исходя из описанной вами логики, вы должны генерировать исключение только после завершения цикла (если совпадений не найдено):

public CustomerAccount findCustomer(String regNum) throws CustomerNotFoundException
{
    for (int i=0; i < accounts.size(); i++)
    {
        if(regNum.equals(accounts.get(i).getCustomerVehicle().getRegistration()))
        {
            return accounts.get(i);
        }
    }
    throw new CustomerNotFoundException();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...