簡體   English   中英

幫助我使用通用數據類型

[英]Aid my use of generic data types

請幫我。 這是一項家庭作業,我不知道為什么它不起作用。 當我調用線性Search方法時,它說我沒有傳遞正確的T數據類型。T應該是通用數據類型,所以我不明白為什么它給我帶來了麻煩。 請幫忙!

    public static void main(String[] args) {
        int[] five= new int[5];
        int[] ten= new int[10];
        int[] fifteen= new int[15];
        fillArray(five);
        fillArray(ten);
        fillArray(fifteen);

        int result1 = linearSearch(five, 37);
        int result2 = linearSearch(ten, 37);
        int result3 = linearSearch(fifteen, 37);

        System.out.println(Arrays.toString(five) + " " + result1);
        System.out.println(Arrays.toString(ten) + " " + result2);
        System.out.println(Arrays.toString(fifteen) + " " + result3);

    }

//此方法對填充的數組執行線性搜索,並且必須接受所有數據類型。

    public static <T extends Comparable<T>> int linearSearch(T[] array, T data){
        int value = -1;  
          for(int i=0; i<array.length; i++){
            if (array[i]== data){
                value = i;
              }
          }
          return value;
        }

泛型不適用於基本類型。 您只能使用實際對象。 不幸的是,自動裝箱在這種情況下無法正常工作。

您可以使用包裝器對象Integer使其工作並繼續使用泛型(假設您的fillArray方法將與Integer對象一起使用,因為它未在示例中發布)。 例如,

public static void main(String[] args) {
    Integer[] five = new Integer[5];
    Integer[] ten = new Integer[10];
    Integer[] fifteen = new Integer[15];

    fillArray(five);
    fillArray(ten);
    fillArray(fifteen);

    int result1 = linearSearch(five, 37);
    int result2 = linearSearch(ten, 37);
    int result3 = linearSearch(fifteen, 37);

    System.out.println(Arrays.toString(five) + " " + result1);
    System.out.println(Arrays.toString(ten) + " " + result2);
    System.out.println(Arrays.toString(fifteen) + " " + result3);

}

如果您對某些形式理論感興趣,可以在JLS 4.5-Parameterized Types中閱讀有關類型參數的更多信息。 如您在4.5.1中所看到的,它說:

類型參數可以是引用類型或通配符。

...隱式排除原始類型。 在JLS中找不到它實際上明確禁止它們的位置,但是我敢肯定它在那里。

您不能使用泛型來做到這一點,但是可以通過反射來做到! 像這樣

public static int linearSearch(Object array,
    Object data) {
  int len = Array.getLength(array);

  for (int i = 0; i < len; i++) {
    if (Array.get(array, i).equals(data)) {
      return i;
    }
  }
  return -1;
}

public static void main(String[] args) {
  int[] five = new int[] { 1, 2, 37 };
  int[] ten = new int[] { 1, 37, 5 };
  float[] fifteen = new float[] { 1.0f, 2.2f, 0f, 4f };

  int result1 = linearSearch(five, 37);
  int result2 = linearSearch(ten, 37);
  int result3 = linearSearch(fifteen, 37);

  System.out.println(Arrays.toString(five) + " "
      + result1);
  System.out.println(Arrays.toString(ten) + " "
      + result2);
  System.out.println(Arrays.toString(fifteen) + " "
      + result3);
}

輸出是

[1, 2, 37] 2
[1, 37, 5] 1
[1.0, 2.2, 0.0, 4.0] -1

暫無
暫無

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

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