二进制搜索不会返回任何内容

时间:2017-02-19 18:12:25

标签: java arrays binary-search

我试图运行二进制搜索,用户可以在其中输入值,我的二进制搜索方法将返回部件号和价格,但在输入任何值时它不会返回任何内容。搜索用于并行数组。我在main中调用下面的方法。

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));

1 个答案:

答案 0 :(得分: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;