2017-02-19 66 views
-1

我想運行一個二進制搜索,用戶可以輸入一個值,而我的二進制搜索方法將返回一個零件號和價格,但是當輸入任何值時它不會返回任何東西。搜索用於並行陣列。我主要調用下面的方法。二進制搜索不返回任何東西

public int binSearch(int target) 
{ 
    int first = 0; 
    int last = numCount -1; 
    boolean found = false; 


    while(first <= last && !found) 
    { 
     mid = (first + last)/2; 
     if(partNum[mid]==target) 
     { 
      found = true; 
     } 
     else if(partNum[mid]<target) 
     { 
      first = mid +1; 
     } 
     else if(partNum[mid]>target) 
     { 
      last = mid -1; 
     } 
     else if(!found) 
     { 
      mid = -1; 
     } 
     return mid; 
    } 

這裏是調用主類中的方法的代碼。

index = inputDevice.nextInt(); 
while(inventoryArray.binSearch(index) >= 0); 
{ 
System.out.printf("Binary search found part #%d. The price is $%d\n", index, inventoryArray.binSearch(index)); 

回答

0

你的數組應該被排序。

你需要設置迴路 以外,當達到最後一個條件(這應該表示目標不在排序數組中)時,在設置mid = -1之後應該中斷,並且不需要檢查是否找到

while(first <= last && !found) 
    { 
    mid = (first + last)/2; 
    if(partNum[mid]==target) 
    { 
     found = true; 
    } 
    else if(partNum[mid]<target) 
    { 
     first = mid +1; 
    } 
    else if(partNum[mid]>target) 
    { 
     last = mid -1; 
    } 
    else 
    { 
     mid = -1; 
     break; 
    } 
    } 
    return mid; 
+0

該數組的文件已經排序。我更新了回報並添加了休息時間,但仍然不會返回任何內容。你想讓我包含更多關於我的主類和數組類的信息嗎? – Checkpleese

+0

是的,請有幫助 –

+0

我只是將它設置爲返回-1,然後程序編譯得很好。我認爲這是關於中途迴歸的。 – Checkpleese