(Java) Return 泛型 T 数组索引在传递给 int 函数后作为 int?

(Java) Return generic T array index as int after passed into an int function?

我有这个由 4 部分组成的 Pset class(提交截止日期已经过去),但我一直在为问题 1 而死,下一组 Pset 将在本周晚些时候开放。我已经阅读了 HW 章节,上班时间(他们可以帮助概念,但不能帮助实现代码)并重新观看讲座,但我找不到我应该如何做到这一点。

这是我无法更改的部分(import java.util.* 包含在它上面):

  public static <T extends Comparable<T>> int findMax(T[] arr)

所以它是一个传递类型 T 数组的 int 函数,应该 return 一个 int 索引。我尝试了多种方法来尝试使用 for & while 循环进行迭代,但问题是我不知道该怎么做。

下面这段代码修改自 programmer/blogger Deepesh Darshan 的 post on finding max values using generics,因为它与我使用 for 循环的代码非常相似。 “return -1;”以防万一没有添加代码。

          int maxPoint = arr[0];
      for(T arrScan : arr){
          if(arrScan.compareTo(maxPoint) > 0 ) {
            maxPoint = arrScan;
          }
              return maxPoint; 
      }
     return -1;
  }
    

一个问题是他的解决方案一直使用 T 而我的不能。

public static <T extends Comparable<T>> T max(T... elements)

我上面的代码给出了以下错误:

GenericMethods.java:16: error: incompatible types: T cannot be converted to int
        int maxPoint = arr[0];
                          ^
  where T is a type-variable:
    T extends Comparable<T> declared in method <T>findMax(T[])
GenericMethods.java:18: error: incompatible types: int cannot be converted to T
          if(arrScan.compareTo(maxPoint) > 0 ) {
                               ^
  where T is a type-variable:
    T extends Comparable<T> declared in method <T>findMax(T[])
GenericMethods.java:19: error: incompatible types: T cannot be converted to int
            maxPoint = arrScan;
                       ^
  where T is a type-variable:
    T extends Comparable<T> declared in method <T>findMax(T[])
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
3 errors

我知道这是因为我需要将 maxPoint 设置为“T”,而不是“int”,但这只会将转换错误降低到 return 值。

关于如何在给定限制下找到最大索引而不会导致转换错误,是否有人可以向我提供一些阅读或建议?我似乎无法在 GFG、W3 或向我建议的任何地方找到任何内容。

您需要跟踪索引而不是元素:

int max = 0;
for (int i = 1; i < arr.length; i++) {
    if (arr[i].compareTo(arr[max]) > 0) {
        max = i;
    }
}
return max;