【问题标题】:Generic linear search in JavaJava中的通用线性搜索
【发布时间】:2017-04-25 04:57:48
【问题描述】:

我必须“实现以下线性搜索的通用方法”,但据我所知,不可能有一个通用数组。我的同学没有一个能弄明白,我们班的助教也没有。这可能吗?如果可以,你能指出我正确的方向吗?

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;
}

【问题讨论】:

    标签: java arrays generics


    【解决方案1】:
    • 您不能在 Java 中创建泛型数组。

    • 您肯定可以使用对数组的泛型引用。

    • 所示代码的问题是您有一个原始数组,而泛型只能与引用一起使用。

    如果您使用Integer[] 而不是int[],该程序将运行。

    【讨论】:

      【解决方案2】:

      数组的元素必须是实现 Comparable 的对象,所以应该使用 Integer 数组:

      Integer[] anArray = new Integer[length];
      

      【讨论】:

        【解决方案3】:

        泛型不允许与基元一起使用,您将需要使用包装器 Integer 类,因此

        Integer[] anArray = new Integer[length];
        

        【讨论】:

          【解决方案4】:

          您只需要创建Comparable 类型的anArrayjava.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中搜索元素的索引

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-17
            • 2023-03-17
            • 1970-01-01
            • 1970-01-01
            • 2014-05-29
            相关资源
            最近更新 更多