这是我的 java 代码,问题是在 binarySearch() 中使用关系运算符 (<) 会出错。我猜我得到这个错误是因为操作数是对象类型。如何消除此错误以便我的函数完美运行?import java.util.Random;import java.util.Arrays;class BinarySearch{ public static void main(String $[]) { Integer arr[]=new Integer[20]; for(int i=0;i<20;i++) arr[i]=(new Random()).nextInt()%10000; display("Initial array :\n"); array(arr); Arrays.sort(arr); display("After sorting :\n"); array(arr); display("Enter the element to be searched for : "); Integer elem=(new java.util.Scanner(System.in)).nextInt(); display(elem+(binarySearch(arr,elem)?" Found":" Not found")+"\n"); } public static <T>boolean binarySearch(T arr[],T val) { int start=0; int end=arr.length-1; while(start<=end) { int mid=(start+end)/2; if(arr[mid]==val) return true; if(arr[mid]<val) start=mid+1; else end=mid-1; } return false; } public static void display(Object o) { System.out.print(o); } public static <T>void array(T arr[]) { for(int i=0;i<arr.length;i++) display(arr[i]+" "); display("\n"); }
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
问题是您的 binarySearch() 方法接受的参数将是对象而不是原始类型,因此使用相等运算符 == 比较它们是不明智的,使用小于运算符 < 比较它们也是无效的。而是按如下方式定义您的 binarySearch 方法:
public static <T extends Comparable<T>> boolean binarySearch(T arr[],T val) {
int start = 0;
int end = arr.length-1;
while(start <= end) {
int mid=(start+end)/2;
int comparison = arr[mid].compareTo(val);
if(comparison == 0) {
return true;
}
if(comparison < 0) {
start = mid+1;
}
else {
end = mid-1;
}
}
return false;
}
添加回答
举报
0/150
提交
取消