【发布时间】:2014-05-22 09:18:34
【问题描述】:
我使用 java 泛型为 MergeSort 编写了一个 java 程序。但是我得到以下错误,我不明白我哪里出错了。请帮帮我
线程“main”中的异常 java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 [Ljava.lang.Comparable; 在 src.MergeSort.sort(MergeSort.java:9) 在 src.MergeSort.main(MergeSort.java:57)
包源代码; 导入 java.util.Arrays;
public class MergeSort {
// sort array of type T using the Mergesort algorithm
public static <T extends Comparable<T>> T[] sort(T[] arr) {
if (arr.length > 1){
T[] firstHalf = (T[]) new Object[arr.length/2];
System.arraycopy(arr, 0, firstHalf, 0, arr.length /2);
sort(firstHalf);
int secondHalfLength = arr.length -arr.length/2;
T[] secondHalf = (T[]) new Object[secondHalfLength];
System.arraycopy(arr, arr.length/2, secondHalf, 0, secondHalfLength);
sort(secondHalf);
merge(firstHalf, secondHalf, arr);
}
return arr;
}
public static <T extends Comparable<T>> void merge(T[] arr1, T[] arr2, T[] temp) {
int current1 = 0;
int current2 = 0;
int current3 = 0;
while(current1 < arr1.length && current2 < arr2.length){
if (arr1[current1].compareTo(arr2[current2]) < 0)
temp[current3++] = arr1[current1++];
else
temp[current3++] = arr2[current2++];
}
while (current1 < arr1.length)
temp[current3++] = arr1[current1++];
while (current2 < arr2.length)
temp[current3++] = arr2[current2++];
}
public static void main(String[] args) {
// sort list of Characters
Character[] charArr = {'H','e','l','l','o',' ','w','o','r','l','d','!'};
charArr = MergeSort.<Character>sort(charArr);
System.out.println(Arrays.toString(charArr));
// sort list of Integers
Integer[] intArr = {23,4,15,8,42,16};
intArr = MergeSort.<Integer>sort(intArr);
System.out.println(Arrays.toString(intArr));
}
}
【问题讨论】:
-
你为什么要实例化
Object[]? -
您的
Array中有一个object没有实现comparable接口 -
因为我无法使用 T[] firstHalf = new T[arr.length/2]; 创建新的泛型数组
-
那么如何为 firstHalf 创建新的泛型数组