2013-02-19 103 views
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 
} 

我試圖理解爲什麼需要有一個,如果(j == nElems )檢查?如果它寫成:

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

如果格式正確,您可以更好地理解代碼。 – 2013-02-19 12:06:00

回答

1

它會:P你可以聲明j裏面的for來限制它的範圍。

在第一個實現中,它所做的是檢查它是否迭代了所有元素,但沒有找到任何內容,因爲j已遞增,直到等於for-loop的停止條件。即,它並沒有因爲break而停止,表明它找到了一個元素。

我喜歡你的解決方案,因爲它更容易閱讀:)

1

是的,這兩種方法都給出了相同的結果。

0

好,Ĵ永遠等於nElems所以這個條件(j==nElems)是沒有錯的,但它不是工作。 你可以使它像這樣(j==nElems-1)但它是偷代碼的浪費,所以你的算法比第一個好。