Найти наибольший в массиве любого типа

#java #arrays #get

#java #массивы #получить

Вопрос:

Здравствуйте, я пишу эту программу, и я пытаюсь выяснить, как сравнить два элемента в массиве, чтобы найти самый большой элемент.

 public static <T extends Comparable< ? super T>> T getLargest(T [] a, int low, int high){
    if(low>high)
            throw new IllegalArgumentException();
    T[] arrCopy = (T[]) new Object[high-low]
    for(int i=low;i<high;i  ){
        if(a[i]>a[i 1])
            arrCopy[i]=a[i];
        else
            arrCopy[i]=a[i 1];
    }
    return arrCopy[0];
}
  

Но тогда я не знаю, как это проверить, я попробовал :

 T[] a = {1,12,7,45,22,23,5};
    System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: "   rec.getLargest(a, 0, 6));
  

но я получаю сообщение об ошибке

Метод getLargest(T[], int, int) в типе Rec неприменим для аргументов (int[], int, int)

Как мне вызвать его, чтобы сделать его массивом чисел? Будет ли массив строк работать с кодом, который у меня есть для получения наибольшего?

Возможно, это просто простые ответы, но я некоторое время работал над всей программой, и сейчас все выглядит не так ясно.

Редактировать

После изменения массива с int[] на Integer[] . Я получаю сообщение об ошибке в этой строке if(a[i]>a[i 1])
:

Оператор> не определен для типа (ов) аргумента T, T

Я предполагаю, что мне придется изменить > знак для сравнения элементов в массиве, но как мне это сделать? Использовать compareTo() ?

Ответ №1:

Это не работает, потому int что не является подклассом Comparable , потому что это даже не an Object . В принципе, вы не можете использовать примитивы ( int , short , long , char , boolean , byte ) с дженериками.

Попробуйте вызвать его с помощью массива Integer .

 Integer[] a = {1,12,7,45,22,23,5};
System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: "   rec.getLargest(a, 0, 6))
  

Если вы хотите, чтобы ваш метод мог принимать int[] , вам нужно будет иметь отдельную функцию для каждого, который вы хотите принять ( int getLargest(int[], int, int) , char getLargest(char[], int, int) , и т.д.) .

Редактировать:

В ответ на ваше редактирование вам нужно использовать compareTo() . < определяется только для примитивов.

Комментарии:

1. @fgualda87 — Я ответил на это, но, как правило, каждый вопрос на этом сайте должен быть одним вопросом. Если у вас есть еще вопросы, откройте новый. Таким образом, вы получите ответы быстрее (я предполагаю, что никто другой не ответил на это, потому что они думали, что я уже получил).