【问题标题】:(Java) Return generic T array index as int after passed into an int function?(Java) 将泛型 T 数组索引作为 int 传递给 int 函数后返回?
【发布时间】:2021-11-26 06:11:07
【问题描述】:

我有这个由 4 部分组成的 Pset 用于一堂课(提交截止日期已过),但我一直在解决问题 1,下一组 Pset 将于本周晚些时候开放。我已经阅读了硬件章节,去办公时间(他们可以帮助实现概念但无法帮助实现代码)并重新观看了讲座,但我找不到我应该如何做到这一点。

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

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

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

下面的这段代码是从程序员/博主 Deepesh Darshan 的 post on finding max values using generics 修改而来的,因为它与我使用 for 循环的代码非常相似。 “返回-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”,但这只会将转换错误降低到返回值。

是否有人可以指出一些关于如何在给定限制下找到最大索引而不导致转换错误的阅读或建议?我似乎在 GFG、W3 或向我推荐的任何地方都找不到任何东西。

【问题讨论】:

  • 您需要对数组的索引使用for循环,当找到新的最大值时,记录当前索引以及新的最大值。
  • 谢谢,这有帮助。我肯定把我脑海中的解决方案过于复杂化了。

标签: java generics type-conversion max


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我一直在使方法过于复杂,并在循环内返回。测试数组以正确的结果通过!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2011-02-20
  • 2020-02-21
  • 1970-01-01
相关资源
最近更新 更多