0

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.

Pshemo
  • 122,468
  • 25
  • 185
  • 269
user446495
  • 46
  • 2

0 Answers0