通用线性搜索

时间:2017-04-25 04:57:48

标签: 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 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;
}

4 个答案:

答案 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类型为Comparablejava.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

中搜索元素的索引