我试图运行二进制搜索,用户可以在其中输入值,我的二进制搜索方法将返回部件号和价格,但在输入任何值时它不会返回任何内容。搜索用于并行数组。我在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));
答案 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;