簡體   English   中英

(Java)在傳遞到 function 后,將通用 T 數組索引作為 int 返回?

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

我有一個 class 的 4 部分 Pset(提交截止日期已經過去),但我一直在解決問題 1,下一組 Pset 將在本周晚些時候開放。 我已經閱讀了 HW 章節,去上班時間(他們可以幫助概念但不能幫助實現代碼)並重新觀看講座,但我找不到我應該如何做到這一點。

這是我無法更改的部分(上面包含導入 java.util.*):

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

所以它是一個 int function 傳遞類型 T 數組並且應該返回一個 int 索引。 我嘗試了多種方法來嘗試使用 for & while 循環進行迭代,但問題是我不知道該怎么做。

下面的代碼是根據程序員/博主 Deepesh Darshan 關於使用 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 或向我建議的任何地方找到任何內容。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM