Java中的泛型线性搜索
我必须“为线性搜索实现以下通用方法”,但据我所知,不可能有通用数组。我的同学没有一个能弄明白,我们班的助教也没有。这可能吗?如果可能的话,你能给我指出正确的方向吗Java中的泛型线性搜索,java,arrays,generics,Java,Arrays,Generics,我必须“为线性搜索实现以下通用方法”,但据我所知,不可能有通用数组。我的同学没有一个能弄明白,我们班的助教也没有。这可能吗?如果可能的话,你能给我指出正确的方向吗 public static void main(String[] args){ Scanner scan = new Scanner(System.in); String type = scan.next(); int length = scan.nextInt(); //checks the
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;
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串类型=scan.next();
int length=scan.nextInt();
//检查类型并生成适当的数组
if(类型等于(“I”)){
int[]anArray=新的int[长度];
对于(int i=0;i
- 不能在Java中创建泛型数组
- 您当然可以使用对数组的泛型引用
- 如图所示的代码的问题是您有一个基本数组,泛型只能与引用一起工作
如果使用Integer[]
而不是int[]
程序将正常工作。
- 不能在Java中创建泛型数组
- 您当然可以使用对数组的泛型引用
- 如图所示的代码的问题是您有一个基本数组,泛型只能与引用一起工作
如果使用Integer[]
而不是int[]
程序将正常工作。数组元素必须是实现可比较的对象,因此应使用整数数组:
Integer[] anArray = new Integer[length];
数组的元素必须是实现可比较的对象,因此应使用整数数组:
Integer[] anArray = new Integer[length];
泛型不允许与原语一起使用,您将需要使用包装整数类,因此
Integer[] anArray = new Integer[length];
泛型不允许与原语一起使用,您将需要使用包装整数类,因此
Integer[] anArray = new Integer[length];
您只需将anArray
类型设置为compariable
并且java.lang.Integer
具有compariable
类型。代码:
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;
}
}
请注意,result
是数组中搜索元素的索引anArray您只需将anArray
类型设置为可比较且java.lang.Integer
具有可比较类型。代码:
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;
}
}
请注意,result
是数组anArray