在Java中对元素的通用数组进行排序

在Java中对元素的通用数组进行排序,java,sorting,generics,Java,Sorting,Generics,我的Java程序中有一个泛型类,类型可以是Double或Integer。我需要编写一个函数,首先需要对泛型类型的值数组进行排序。我遇到以下异常,我不确定如何修复它。我将感谢任何帮助 Exception in thread "main" java.lang.NullPointerException at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290) at java.u

我的Java程序中有一个泛型类,类型可以是Double或Integer。我需要编写一个函数,首先需要对泛型类型的值数组进行排序。我遇到以下异常,我不确定如何修复它。我将感谢任何帮助

Exception in thread "main" java.lang.NullPointerException
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at datastructures.CircularBuffer.getMedian(CircularBuffer.java:98)
    at test.CircularBufferTests.test4(CircularBufferTests.java:67)
    at test.CircularBufferTests.main(CircularBufferTests.java:13)
这是我的密码:

public class CircularBuffer<T extends Number> {

private T[] array;

public CircularBuffer(int n){
        array = (T[])new Number[n];
    }

public double getMedian(int size){


        ...
            Arrays.sort(array);
        ...

    }
}
公共类循环缓冲{
私有T[]数组;
公共通告缓冲区(国际北){
数组=(T[])新数字[n];
}
公共双进位(整数大小){
...
数组。排序(数组);
...
}
}

谢谢

显然,这里没有足够的代码可以理解,但是对于您将T传递给的ComparableTimSort(异常实际上来自)类,并不是所有的T类型(数字类)实现Comparable接口以检查这是否是您的问题尝试用Comparable cast传递T显然这里没有足够的代码可以理解,但是对于传递T的ComparableTimSort(异常实际上来自)类,而不是传递T的所有T类型(数字类)实现Comparable接口以检查这是否是您的问题尝试用Comparable cast传递T显然这里没有足够的代码可以理解,但是对于传递T的ComparableTimSort(异常实际上来自)类,而不是传递T的所有T类型(数字类)实现Comparable接口以检查这是否是您的问题尝试用Comparable cast传递T显然这里没有足够的代码可以理解,但是对于传递T的ComparableTimSort(异常实际上来自)类,而不是传递T的所有T类型(数字类)实现Comparable接口以检查这是否是您的问题尝试使用Comparable cast传递T

您必须编写自定义比较器才能使用Array.sort()进行排序


为了使用array.sort()进行排序,必须编写一个自定义比较器


为了使用array.sort()进行排序,必须编写一个自定义比较器


为了使用array.sort()进行排序,必须编写一个自定义比较器

你能行

  • vhax的建议。更具体地说

    Arrays.sort(array, new Comparator<T>{
        @Override
        public int compare(T arg0, T arg1)
        {
            ...
        }
    });
    
    Arrays.sort(数组,新比较器{
    @凌驾
    公共整数比较(T arg0,T arg1)
    {
    ...
    }
    });
    
  • 更具体地说,是什么疯狂素暗示的

    public class CircularBuffer<T extends Number & Comparable<T>>
    
    公共类循环缓冲
    
  • 这样,您就可以更具体地限制T。这被称为“多重边界”

    您可以这样做

  • vhax的建议。更具体地说

    Arrays.sort(array, new Comparator<T>{
        @Override
        public int compare(T arg0, T arg1)
        {
            ...
        }
    });
    
    Arrays.sort(数组,新比较器{
    @凌驾
    公共整数比较(T arg0,T arg1)
    {
    ...
    }
    });
    
  • 更具体地说,是什么疯狂素暗示的

    public class CircularBuffer<T extends Number & Comparable<T>>
    
    公共类循环缓冲
    
  • 这样,您就可以更具体地限制T。这被称为“多重边界”

    您可以这样做

  • vhax的建议。更具体地说

    Arrays.sort(array, new Comparator<T>{
        @Override
        public int compare(T arg0, T arg1)
        {
            ...
        }
    });
    
    Arrays.sort(数组,新比较器{
    @凌驾
    公共整数比较(T arg0,T arg1)
    {
    ...
    }
    });
    
  • 更具体地说,是什么疯狂素暗示的

    public class CircularBuffer<T extends Number & Comparable<T>>
    
    公共类循环缓冲
    
  • 这样,您就可以更具体地限制T。这被称为“多重边界”

    您可以这样做

  • vhax的建议。更具体地说

    Arrays.sort(array, new Comparator<T>{
        @Override
        public int compare(T arg0, T arg1)
        {
            ...
        }
    });
    
    Arrays.sort(数组,新比较器{
    @凌驾
    公共整数比较(T arg0,T arg1)
    {
    ...
    }
    });
    
  • 更具体地说,是什么疯狂素暗示的

    public class CircularBuffer<T extends Number & Comparable<T>>
    
    公共类循环缓冲
    


  • 这样,您就可以更具体地限制T。这称为“多个边界”

    您能提供一个示例来演示此行为吗?
    array
    的元素为
    null
    。不可能。如果要包含
    null
    请编写一个自定义的
    比较器来处理它。检查数组中的项是否为null。是否可以共享更多代码?不可能follow@AmirAfghani可比TIMSORT.COUNTRUND和MAKEASSENDING的
    ?这会告诉OP什么?你能提供一个例子来演示这个行为吗?
    array
    的元素是
    null
    。不可能。如果要包含
    null
    请编写一个自定义的
    比较器来处理它。检查数组中的项是否为null。是否可以共享更多代码?不可能follow@AmirAfghani可比TIMSORT.COUNTRUND和MAKEASSENDING的
    ?这会告诉OP什么?你能提供一个例子来演示这个行为吗?
    array
    的元素是
    null
    。不可能。如果要包含
    null
    请编写一个自定义的
    比较器来处理它。检查数组中的项是否为null。是否可以共享更多代码?不可能follow@AmirAfghani可比TIMSORT.COUNTRUND和MAKEASSENDING的
    ?这会告诉OP什么?你能提供一个例子来演示这个行为吗?
    array
    的元素是
    null
    。不可能。如果要包含
    null
    请编写一个自定义的
    比较器来处理它。检查数组中的项是否为null。是否可以共享更多代码?不可能follow@AmirAfghani可比TIMSORT.COUNTRUND和MAKEASSENDING的
    ?这会告诉OP什么?当我第一次回顾这篇文章时,我不明白你为什么要把两个不同的答案复制成一个新的答案(通常是不赞成的)。然后我检查了一下,你实际上提供了重要的额外信息,所以你得到了+1。当我第一次审查这篇文章时,我不明白你为什么要把两个不同的答案复制到一个新答案中(通常不赞成)。然后我检查了一下,你实际上提供了重要的额外信息