【发布时间】:2015-09-11 12:25:58
【问题描述】:
我有一个对象数组,该对象包含数据成员,例如GoalsFor、GoalsAgainst 和 MatchPoints。现在,我使用二分搜索方法对给定的goalsFor 或goalsAgainst 或MatchPoints 值进行搜索并显示数据。 我正在制作一个二进制搜索类来执行搜索操作,但目前我必须为这三个操作的对象的每个数据成员制作三个二进制搜索类。有没有办法可以重用二进制搜索代码而不是复制三次。
这是一个家庭作业问题,但我假设我的疑问更为普遍。 约束:不允许线性搜索,除了 i/o 外没有内置函数可以使用
public class BinarySearchPoints
{
public static void search(Teams arr[], int searchValue, int start , int end)
{
if(start > end)
return;
int mid = (end + start ) / 2;
if(searchValue == arr[mid].points)
{
System.out.print(arr[mid].toString());
search(arr, searchValue, mid + 1, end);
search(arr, searchValue, start, mid - 1);
}
else if(searchValue < arr[mid].points)
{
search(arr, searchValue, mid + 1, end);
}
else
search(arr, searchValue, start, mid - 1);
}
}
我在其他二分搜索实现中唯一改变的是使用goalsFor 和Goals against 而不是点
【问题讨论】:
-
您可以将二进制搜索逻辑实现为 java 函数,然后多次调用该函数
-
你能展示这个被复制三次的代码吗?
-
请发布一份您的二进制搜索代码,以便更容易解释需要更改的内容。
-
简短回答:是的。更长的答案:魔鬼在细节中;代码的细节将决定抽象它的方法。您可能还想查看
Comparator界面。 -
您可能需要考虑
binarySearch的非递归实现,它更具可读性。
标签: java arrays class object code-reuse