代码之家  ›  专栏  ›  技术社区  ›  eddiewastaken

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

  •  2
  • eddiewastaken  · 技术社区  · 6 年前

    我有一个非常基本的函数,它可以搜索 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 回复  |  直到 6 年前
        1
  •  4
  •   Eran    6 年前

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

    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();
    }
    
        2
  •  1
  •   Sam    6 年前

    在调用一次方法后,不能从该方法引发多个异常。

    一旦抛出异常,您将退出该范围,因此无法再抛出另一个异常。

    在特定情况下,如果循环结束时customer为null,则可以抛出异常。

        3
  •  0
  •   Piyush Upadhyay    6 年前

    从throws类中删除CustomerNotFoundException。仅在else块中捕获异常,因为它似乎没有任何用处,并在捕获异常后继续放置。 不清楚抛出异常的用法,因为您仍然希望继续循环。 在代码中引发异常将返回父方法。