日期:2014-05-20  浏览次数:20653 次

带泛型的冒泡排序的问题
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!