在某个地方错过了一个返回声明?

时间:2016-03-04 22:01:25

标签: java arraylist

我正在为学校做一个基本的Java作业。此代码段涉及在ArrayList中搜索特定的部件号。当我尝试编译时,IDE说我有一个丢失的return语句。但是,我看不出它在哪里。索引增量后是否需要返回语句?如果是这样,则返回null变得无法访问。非常感谢你们。

        public InventoryItem findInventoryItem(int searchPartNumber)
{
    int index = 0;
    boolean searching = true;
    while (index < items.size() && searching){
        InventoryItem inventoryItem = items.get(index);
        int fetchedPartNumber = inventoryItem.getPartNumber();
        if(fetchedPartNumber == (searchPartNumber)){
            searching = false;
            return inventoryItem;
        }
        else{
            index++;
        }

        if(searching){
            return null;
        }

    }
}

8 个答案:

答案 0 :(得分:1)

该方法在所有情况下都期望返回值。这意味着您还必须在else块中添加返回值。或者您可以在所有语句的末尾只添加一次返回值。

答案 1 :(得分:1)

您的代码有几个问题:

  1. 在您比较列表中的第一项并且它不匹配之后 - 您将停止比较,因为搜索是真的并且您将返回null
  2. 如果是空列表,则需要返回null
  3. 这是固定版本:

    public InventoryItem findInventoryItem(int searchPartNumber) {
        for (InventoryItem inventoryItem : items)
            if (inventoryItem.getPartNumber() == searchPartNumber)
                return inventoryItem;
        return null;
    }
    

答案 2 :(得分:0)

您没有处理搜索不正确的情况。

即,

 if(searching){
            return null;
        }

这里处理的是其他部分?

答案 3 :(得分:0)

无论您的方法发生什么,都必须返回一些值(即使它为null)。

现在,如果你永远不会进入你的同时(因为这个条件没有完成 - > gt;就像items.size()是0),你的方法将不会返回任何东西。

换句话说:返回null;在你的while循环的结束括号之后。

另一个重要的注意事项:你确实意识到这一点只会看第一个项目,对吧?因为如果您的第一个项目不是您正在搜索的项目,那么您的变量搜索仍然是真的,这将强制该方法返回null(不查看任何其他项目)

答案 4 :(得分:0)

首先,如果items.size等于零,则需要返回。其次,如果你什么都没找到,你需要回来。第三,我看不到变量searching的任何用处。 你可以稍微改变你的搜索功能。最终形式将是这样的:

public InventoryItem findInventoryItem(int searchPartNumber) {
    int index = 0;
    while (index < items.size()){
        InventoryItem inventoryItem = items.get(index);
        int fetchedPartNumber = inventoryItem.getPartNumber();

        if(fetchedPartNumber == searchPartNumber)
            return inventoryItem;

        else
            index++;
    }
    return null;
}

答案 5 :(得分:0)

return循环之后,您最后错过了while语句。

这需要处理while循环防护变为假的情况,items为空,或searching设置为false

编译器无法确定这些是否永远不会变为false,因此您需要返回以防万一。

答案 6 :(得分:0)

这样做

    public InventoryItem findInventoryItem(int searchPartNumber)
    {
        int index = 0;
        //boolean searching = true; comment out this line
        InventoryItem inventoryItem = null; //declare null InventoryItem here
        while (index < items.size())
        {
            inventoryItem = items.get(index);
            int fetchedPartNumber = inventoryItem.getPartNumber();
            if (fetchedPartNumber == (searchPartNumber))
            {
                //searching = false; comment out this line
                break; //do something to get out from while loop
            }
            else {
                inventoryItem = null;
                index++;
            }
        }

        return inventoryItem; //if found then it will have item otherwise null
    }

答案 7 :(得分:0)

所有具有类型(不是空)的函数都要求您根据方法签名返回一些内容。这意味着您必须在所有情况下返回一些内容。您还没有包含搜索不正确的情况,如果是这种情况,则必须返回一些内容。

        if(searching){
          return null;
        } else{
          //return something else
        }

重要的是要注意,在这种情况下,else是隐含的,因此你实际上不必提供else。你可以改为:

        if(searching){
          return null;
        }
        //return something else

请记住,如果搜索结果为true,则返回null并返回&#34;返回其他内容&#34;永远不会被召唤。