1

在《Java 中的数据结构和算法》一书中,提供了以下数组搜索方法代码:

{
    int j;
    for(j=0; j< nElems; j++)            // for each element,
        if( a[j].getLast().equals(searchName))  // found item?
             break;                       // exit loop before end
    if(j == nElems)                    // gone to end?
      return null;                    // yes, can't find it
    else
      return a[j];                    // no, found it
} 

我试图理解为什么需要进行 if(j == nElems) 检查?如果将其编写为,该方法的工作方式是否相同:

{           
    int j;
    for(j=0; j <nElems; j++)               
      if( a[j].getLast().equals(searchName))      
         return a[j];              
    return null;
}
4

3 回答 3

1

是的,这两种方式都给出相同的结果。

于 2013-02-19T11:59:58.790 回答
1

它会 :P 您也可以j在 for 内部声明以限制其范围。

在第一个实现中,它所做的是检查它是否遍历了所有元素并且没有找到任何东西,因为j它是递增的,直到它等于for-loop. 即它没有因为 停止break,说明它找到了一个元素。

我更喜欢你的解决方案,因为它更容易阅读:)

于 2013-02-19T12:00:37.270 回答
0

好吧, j永远不等于 nElems 所以这个条件(j==nElems)没有错,但它不工作。你可以这样做, (j==nElems-1) 但它会浪费代码,所以你的算法比第一个更好。

于 2013-02-19T12:29:34.027 回答