如何在不破坏for循环的情况下抛出异常?

时间:2018-04-25 10:45:23

标签: java for-loop exception exception-handling

我有一个非常基本的函数,它搜索CustomerAccount的ArrayList,并返回与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 :(得分:4)

根据您描述的逻辑,您应该只在循环完成后抛出异常(如果未找到匹配项):

    <form name="$ctrl.bankInfoForm" novalidate ng-submit="$ctrl.saveInfo($event)">
    <input type="text" ng-model="$ctrl.bankTransferNumber" ng-disabled="$ctrl.disableTextEdit" name="bankTransferNumber" required ng-change ="$ctrl.changeTransferNumber()"/>
    <div ng-messages="$ctrl.bankInfoForm.bankTransferNumber.$error" ng-show="$ctrl.bankInfoForm.bankTransferNumber.$dirty">                                                   
    	<div ng-message = "validateTransferNumber" >The transfer number is not correct</div>
    </div>
</form>    

答案 1 :(得分:1)

在调用一次方法后,不能从方法中抛出多个异常。

一旦抛出异常,你就退出范围,因此不能抛出另一个异常。

如果客户在循环结束时为空,则在特定情况下可以执行的操作是抛出异常。

答案 2 :(得分:0)

从throws类中删除CustomerNotFoundException。仅在else块中捕获异常,因为它似乎没用,并在异常捕获后继续。 不清楚使用抛出异常,因为你仍然希望继续循环。 在代码中抛出异常将返回父方法。