请帮帮我。这是一个家庭作业,我无法弄清楚为什么它不会工作。当我调用线性搜索方法时,它说我没有传递正确的数据类型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;
}
答案 0 :(得分:3)
泛型不适合原始类型。您只能使用实际对象。不幸的是,自动拳击在这种情况下不会神奇地工作。
您可以通过使用包装器对象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);
}
对象。没有张贴在你的例子中)。如,
{{1}}
如果您对某些形式理论感兴趣,可以在JLS 4.5 - Parameterized Types中阅读有关类型参数的更多信息。正如您在4.5.1中看到的那样,它表示:
类型参数可以是引用类型或通配符。
...隐含地排除了原始类型。无法在JLS中找到它实际明确禁止它们的位置,但我确定它在那里。
答案 1 :(得分:1)
你无法使用Generics,但你可以使用reflection!像这样,
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