[英]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.