我必须"为线性搜索实现以下通用方法"但据我所知,它不可能有一个通用数组。我的同学们都没有能够弄明白,也没有我们班级的助教。这有可能,如果是这样,你能指出我正确的方向吗?感谢
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String type = scan.next();
int length = scan.nextInt();
//checks the type and makes the appropriate array
if (type.equals("I")) {
int[] anArray = new int[length];
for (int i = 0; i<length; i++) {
anArray[i] = scan.nextInt();
}
int key = scan.nextInt();
linearSearch(anArray, key); //Error, the method is not applicable for the arguments
}
}
public static <E extends Comparable<E>> int linearSearch(E[] list, E key) {
for (int i = 0; i<list.length; i++) {
if (list[i].equals(key)) {
return i;
}
}
return 0;
}
答案 0 :(得分:2)
您无法使用Java 创建通用数组。
您肯定可以使用对数组的泛型引用。
如图所示,代码的问题在于您有一个原始数组,而泛型只能用于引用。
如果您使用Integer[]
代替int[]
,该程序将有效。
答案 1 :(得分:1)
数组的元素必须是实现Comparable的对象,因此您应该使用Integer数组:
Integer[] anArray = new Integer[length];
答案 2 :(得分:1)
泛型不允许使用原语,你将需要使用包装器Integer类,因此
Integer[] anArray = new Integer[length];
答案 3 :(得分:0)
您只需要anArray
类型为Comparable
,java.lang.Integer
类型为Comparable
。代码:
package com.stackoverflow.json;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String type = scan.next();
int length = scan.nextInt();
// checks the type and makes the appropriate array
if (type.equals("I")) {
Integer[] anArray = new Integer[length];
for (int i = 0; i < length; i++) {
anArray[i] = scan.nextInt();
}
int key = scan.nextInt();
Comparable result = linearSearch(anArray, key); // Error, the method is not applicable
// for the arguments
System.out.println(result);
}
}
public static <E extends Comparable<E>> int linearSearch(E[] list, E key) {
for (int i = 0; i < list.length; i++) {
if (list[i].equals(key)) {
return i;
}
}
return 0;
}
}
打印:
I
4
12
3
4
6
3
1
请注意,result
是数组anArray