在Java中返回错误?

时间:2012-01-13 12:26:48

标签: java

我的代码中的代码中出现错误:

public boolean findCustomer(String inPersonalNumber){

    // check if personal number already exist
    for (int i=0; i<customerList.size();i++) {
        if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){
            return true;
        }
    }
    return true;    
}

当我删除第一个返回true而不是最后一个返回true时,它不会在我的eclipse代码中得到错误,但为什么我不能拥有第一个位置并且这是否相同?谢谢!

编辑:来自eclipse的错误消息说:此方法必须返回boolean类型的结果。我很困惑,因为这不是我做过的事情吗?!

是的,中断必须在代码中

我可以用其他方式编写方法吗?

编辑编号2
为什么这段代码不起作用?

public boolean findCustomer(String inPersonalNumber){

// check if personal number already exist
for (int i=0; i<customerList.size();i++) {
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){
            return true;
        }
        else {
            return false;
        }
    }
}

此方法返回一个布尔值,所以我不明白为什么会出错!?代码对我来说是正确的吗?

6 个答案:

答案 0 :(得分:3)

您的编辑#2无法编译,因为您的代码可能无法进入for循环。如果customerList.size()为0,就会出现这种情况。要解决此问题,您只需要在 for循环之后添加一个返回语句

// check if personal number already exist
for (int i=0; i<customerList.size();i++) {
    if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){
        return true;
    }
    else {
        return false;
    }
}
return false;

此处的另一点是,此代码逻辑上没有多大意义:它将基于第一个返回true或false列表中的项目。这可能你想要什么。所以在这里仔细看看其他几个答案,其中很多都是你如何做到这一点的好例子。

答案 1 :(得分:0)

看起来你已经关闭了eclipse的自动构建功能。它可能会抱怨当你还没有完全输入你的代码时曾经存在的错误!如果您因某种原因更新了系统,也会发生这种情况。

另外,如果条件不满足,你不应该返回false吗?

public boolean findCustomer(String inPersonalNumber) {

    // check if personal number already exist
    for (int i = 0; i < customerList.size(); i++) {
        if (customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)) {
            return true;
        }
    }

    return false;
}

答案 2 :(得分:0)

public boolean findCustomer(String inPersonalNumber){
    boolean result = false;
    // check if personal number already exist
    for (int i=0; i<customerList.size();i++) {
        if(customerList.get(i).getCustomerPersonalNumber().equals(inPersonalNumber)){
            result = true;
            break;
        }
    }
    return result ;    
}

答案 3 :(得分:0)

首次返回仅在满足所有条件的情况下返回,但此方法应按代码返回boolean。它也会期待失败的回归。

删除第一个返回不会影响编译,因为它在第二位有一个返回,它可以在没有任何条件的情况下工作。

编辑:回答第二个问题

这段代码有两个返回值,但是如果你的customerList的大小为0,那么在这种情况下,方法必须返回boolean。对?仅此而已,编译器正在询问。

BTW,代码没有空检查。

你的最终代码可能是这个。在代码中保留多个return语句不是一种好的做法。

public boolean findCustomer(String inPersonalNumber) {
    boolean retVal = false;
    if (!(inPersonalNumber == null || inPersonalNumber.trim().equals("")
         || customerList == null || customerList.size() == 0)) { // inputs are valid to run this check
         // check if personal number already exist
        for (int i = 0; i < customerList.size(); i++) {
            if (inPersonalNumber.equals(customerList.get(i).getCustomerPersonalNumber()) { // to avoid NPE, kept inPersonalNumber in check 
                retVal = true;
                break;
            }
        }
    }
    return retVal;    
}

答案 4 :(得分:0)

  

当我删除第一个返回true而不是最后一个返回时   是的,它没有在我的eclipse代码中得到错误,但为什么我不能   第一个地方,这会是一样的吗?

如果删除第二个return语句,代码将能够运行而不返回值 - 这是不可能的,因为您将方法定义为返回类型为Boolean。所以它必须总是返回一个值,无论如何。

只需将第二个return语句更改为false ,就可以执行您想要的操作。

答案 5 :(得分:-1)

因为你的for循环失去意义,无论如何你都会回归真实 如果你想停止循环使用break;而不是第一次返回。