我正在为学校做一个基本的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;
}
}
}
答案 0 :(得分:1)
该方法在所有情况下都期望返回值。这意味着您还必须在else块中添加返回值。或者您可以在所有语句的末尾只添加一次返回值。
答案 1 :(得分:1)
您的代码有几个问题:
这是固定版本:
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;永远不会被召唤。