首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

带泛型的冒泡排序的有关问题

2012-09-06 
带泛型的冒泡排序的问题Java codepublic T extends Number T[] bubbleSort(T array[]){//冒泡排序的基本

带泛型的冒泡排序的问题

Java code
    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;    }


求解答~~~~


[解决办法]
楼主,你好,为了你这个问题我专门编了一下程,大概找出了一些问题,那么现在就和大家分享一下吧!
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!

热点排行