I write a method mergeSort. This is my code below:
import java.util.Arrays;
public class Search {
public static <T extends Comparable<T>> T[] mergeSort(T[] arr1, T[] arr2) {
int length = arr1.length + arr2.length;
@SuppressWarnings("unchecked")
T[] result = (T[]) new Comparable[length];
int p = 0;
int q = 0;
int i = 0;
for (i = 0; i < result.length && p < arr1.length && q < arr2.length; i++) {
if (arr1[p].compareTo(arr2[q]) <= 0) {
result[i] = (T) arr1[p];
p++;
} else if (arr1[p].compareTo(arr2[q]) > 0) {
result[i] = (T) arr2[q];
q++;
}
}
if (p >= arr1.length) {
for (int j = q; j < arr2.length; j++) {
result[i++] = (T) arr2[j];
}
} else if (q >= arr2.length) {
for (int j = p; j < arr1.length; j++) {
result[i++] = (T) arr1[j];
}
}
System.out.println(Arrays.toString(result));
return result;
}
public static void main(String[] args) {
Integer[] arr1 = { 2, 3, 6, 10, 11 };
Integer[] arr2 = { 4, 5, 7, 8 };
Integer[] result = mergeSort(arr1, arr2);
System.out.println(Arrays.toString(result));
}
}
It gives me [2, 3, 4, 5, 6, 7, 8, 10, 11]
Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Comparable; cannot be cast to class [Ljava.lang.Integer; ([Ljava.lang.Comparable; and [Ljava.lang.Integer; are in module java.base of loader 'bootstrap')
at Search.main(Search.java:72)
I don't know why, could someone help me? Thank You.