Java仅在循环内返回值

时间:2015-02-25 13:24:52

标签: java methods

我有一个方法,如果找到,我需要返回一个特定的对象,否则抛出异常。所以我写了以下内容:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID == nextCustomer.getCustomerID()){
            return nextCustomer;
        }else{
            throw new CustomerNotFoundException();
        }
    }
}

但它要求我在方法的底部添加一个return语句。有没有办法忽略这个?

6 个答案:

答案 0 :(得分:6)

它要求您在未执行循环时(即customers为空)从方法中提供有效结果。你必须这样做:

for (CustomerDetails nextCustomer : customers){
    if (givenID == nextCustomer.getCustomerID()){
        return nextCustomer;
    }
}
throw new CustomerNotFoundException();

因为否则你会在不满足if中提供的条件的第一个元素之后抛出异常。

答案 1 :(得分:3)

将您的代码更改为:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID == nextCustomer.getCustomerID()){
            return nextCustomer;
        }
    }
    throw new CustomerNotFoundException();
}

答案 2 :(得分:1)

如果找到对象,则可以返回该对象。如果找不到它会在循环结束时抛出异常:

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException{
    for(CustomerDetails nextCustomer : customers){
        if(givenID.equals(nextCustomer.getCustomerID())){
            return nextCustomer;
       }
    }
       throw new CustomerNotFoundException();
}

请注意。您将strings==进行了比较。在这里,您必须使用equals方法!

答案 3 :(得分:0)

如果发生意外行为,则应抛出异常。失败的搜索不是例外,但很少是常见原因。

出于好的设计原因,你不应该抛出异常。相反,您可以扩展调用方法以测试结果是否为null-like。

答案 4 :(得分:0)

您只需在方法的末尾添加return;即可。它不可访问,因此不会引起问题。

您还可以在循环中使用try catch。如果您希望遵循此路线,这是一个方便的教程。 http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html

答案 5 :(得分:0)

如果在循环中找不到客户,它应该将异常抛出循环。你也应该使用" .equals"而不是" ==",因为" givenID"是一个对象。

public CustomerDetails findCustomer( String givenID ) throws CustomerNotFoundException {
    for (CustomerDetails nextCustomer : customers) {
        if (givenID.equals(nextCustomer.getCustomerID())){
            return nextCustomer;
        }
    }
    throw new CustomerNotFoundException();
}