带泛型的冒泡排序的问题

王龙彪 2012-08-09 11:11:20

public <T extends Number> T[] bubbleSort(T array[]){
//冒泡排序的基本思想: 遍历数组, 每次将最大的数放到最后.
T temp = null;
for(int i = 0; i < array.length - 1; i++){
for(int j = 1; j < array.length - i - 1; j++){
if(array[j] < array[j + 1]){/*问题在这里, 问题是我已经限定T 是Number 的子类了, 为什么提示The operator < is undefined for the argument type(s) T, T 呢? */
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}


求解答~~~~
...全文
330 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
王龙彪 2012-08-10
  • 打赏
  • 举报
回复
我明白了
谢谢楼上各位!
gukuitian 2012-08-09
  • 打赏
  • 举报
回复
确实啊,Number 本身就不支持'<','>'操作。
还真没注意过这个。
fearlessMore 2012-08-09
  • 打赏
  • 举报
回复
还补充一句: 实现Comparable接口也是要重写compareTo()方法来比较大小。反正是不能直接运用比较符号来比较大小。

[Quote=引用 3 楼 的回复:]

楼主是新手吧:就是比较符号是不能比较对象的,== 和 equals()比较的是2对象的地址。 除非重写equals()方法来比较2个特定对象的内容。
[/Quote]
fearlessMore 2012-08-09
  • 打赏
  • 举报
回复
楼主是新手吧:就是比较符号是不能比较对象的,== 和 equals()比较的是2对象的地址。 除非重写equals()方法来比较2个特定对象的内容。
qertyop 2012-08-09
  • 打赏
  • 举报
回复
楼主,你好,为了你这个问题我专门编了一下程,大概找出了一些问题,那么现在就和大家分享一下吧!
1、Number接口是定义在java.lang包中,是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short的超类,它本身是一个抽象类,在查询了API文档之后发现它没有compareTo()这个方法,也就是说它自身是无法使用<,>和=号这些算术运算符的,这是你的一个错误,修改的方法时将Number改为Comaprable,完整的方法头是这样的:public static <T extends Comparable<T>> T[] bubbleSort(T array[])。值得一提的是所有基本类型的封装类都实现了这个接口,也就是说它能实现Number接口的功能。
2、我自己写了一个测试程序,如下:
public static void main(String[] args) {
// TODO 自动生成方法存根
Integer a[]={9,7,6,8,2,4,0};
// int b[]={9,7,6,8,2,4,0};
a=bubbleSort(a);
for(Integer temp:a){
System.out.print(temp+" ");
}

Number num=new Integer(0);

}
在这个程序中bubbleSort的参数如果是b的话依然会报错,因为基本数据类型的数组类型不是T【】的子类,所以是不可以使用b。话有点多,希望对楼主有用,Good Luck!
4566131321321313 2012-08-09
  • 打赏
  • 举报
回复
T temp = null;
你数组里放的是对象!

array[j] < array[j + 1]
能这样比较大小?
wangdong20 2012-08-09
  • 打赏
  • 举报
回复
楼主的类是以什么比大小呢
你可以写一个方法compare(),专门负责对象比较
a.compare(b) 结果如果>0,就是a大于b
hanson339751607 2012-08-09
  • 打赏
  • 举报
回复
问题很明显:The operator < is undefined for the argument type(s) T, T

就是说 ‘<’操作符没有定义这种关系比较,
因为‘<’只能比较java定义的数据类型的大小,
而这里的数据类型是T,编译的时候是通不过的,
只有在运行的时候,知道了T具体是那种类型,才能用‘<’来进行比较。
FFF9527 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
Java code

public <T extends Number> T[] bubbleSort(T array[]){
//冒泡排序的基本思想: 遍历数组, 每次将最大的数放到最后.
T temp = null;
for(int i = 0; i < array.length - 1; i++){
for(i……
[/Quote]

多带一个参数,public <T extends Number> T[] bubbleSort(T array[],Comparator<? super T> comp)。

你的对象必须实现Comparator接口,可以参考源码Collections.java

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧