【发布时间】: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