#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 — Я ответил на это, но, как правило, каждый вопрос на этом сайте должен быть одним вопросом. Если у вас есть еще вопросы, откройте новый. Таким образом, вы получите ответы быстрее (я предполагаю, что никто другой не ответил на это, потому что они думали, что я уже получил).