作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public static <T extends Comparable<T>> T search(T[] a,T first,T last,T key)
{
T result;
if(first.compareTo(last)>0)
result = -1;
else{
int mid = (Integer)(first+last)/2;
if(key==a[mid])
result = mid;
else if(key<a[mid])
result = search(a,first,mid - 1,key);
else if(key>a[mid])
result = search(a,mid+1,last,key);
}
return result;
}
这是我正在尝试编写的递归二分搜索。我正在尝试使用泛型,但我对此非常天真。我遇到的所有错误都是类型转换错误。除非它说 (mid-1)。那里的错误是“推论变量 T 具有不兼容的边界”。我想学习如何解决这些问题。 谢谢。
最佳答案
您似乎误解了 Comparable
接口(interface);仅仅因为某些东西具有可比性并不意味着转换为Integer
就会成功。或者您可以使用 +
运算符。如果您确定能够将您的值相加,您可能需要查看 Number提供 intValue()
函数的接口(interface)。
关于Java如何编写泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883240/
我是一名优秀的程序员,十分优秀!