【问题标题】:How to search a specific variable in various type of array using generic method?如何使用泛型方法在各种类型的数组中搜索特定变量?
【发布时间】:2019-04-28 20:45:41
【问题描述】:

我试图在各种类型的数组中返回一个特定的变量,我只能使用泛型方法。但是,当我尝试执行搜索方法时,我不断收到此错误。有没有人可以给我一些想法你如何解决它?

我正在使用 drjava。

这是调用语句:

 System.out.printf( "%nThe item returned from integerArray is: %s",
                      returnItem( integerArray,
                                  2 ) );

  System.out.printf( "%nThe item returned from doubleArray is: %s",
                      returnItem( doubleArray,
                                  2 ) );

  System.out.printf( "%nThe item returned from characterArray is: %s",
                      returnItem( characterArray,
                                  2 ) );

  System.out.printf( "%nThe item returned from petArray is: %s",
                      returnItem( petArray,
                                  2 ) );

这是我的搜索方法:

public static < T> int returnItem( T[ ] inputArray, int key ){

        // ERROR: incompatible types: T cannot be converted to int

    for ( int element : inputArray ){

        if( key == element ){

           return element;
       }
     }
       return -1;


} // end method returnItem 

integerArray 返回的项是:3

integerArray返回的项是:3.3

integerArray返回的项是:L

【问题讨论】:

  • 方法returnItem应该返回什么?索引,还是元素本身?
  • 元素本身
  • 如果您已经知道元素并将其传递给方法,在数组中查找并返回它,为什么这很有用?
  • 要修复您的方法,您只需将所有 int 声明更改为 T 以使其通用。

标签: java arrays generics search generic-collections


【解决方案1】:

@Noone,我建议您在构造函数中创建一个以预期数据类型作为参数并以时间作为参数的类。然后你的通用返回项逐项或逐项返回键可以世界。

如果不是太多。下面考虑我的实现:

public final class SearchAnyArray<T> {

    T[] inputArray;

    public SearchAnyArray(final String[] stringArray) {
        inputArray = (T[]) stringArray;
    }

    public SearchAnyArray(final int[] integerPrimitives) {
        Integer[] ints = new Integer[integerPrimitives.length];
        for (int x = 0; x < integerPrimitives.length; x++) {
            ints[x] = integerPrimitives[x];
        }
        inputArray = (T[]) ints;
    }

    public SearchAnyArray(final double[] doublePrimitives) {
        Double[] doubles = new Double[doublePrimitives.length];
        for (int x = 0; x < doublePrimitives.length; x++) {
            doubles[x] = doublePrimitives[x];
        }
        inputArray = (T[]) doubles;
    }

    public SearchAnyArray(char[] charPrimitives) {
        Character[] chars = new Character[charPrimitives.length];
        for (int x = 0; x < charPrimitives.length; x++) {
            chars[x] = charPrimitives[x];
        }
        inputArray = (T[]) chars;
    }

    public int returnItemIndex(T key) {
        for (int x = 0; x < inputArray.length; x++) {
            if (inputArray[x].equals(key)) {
                return x;
            }
        }
        return -1;
    }

    public T returnItem(int index) {
        if (index < 0 || index > (inputArray.length - 1)) {
            throw new ArrayIndexOutOfBoundsException("Invalid key ");
        }
        return inputArray[index];
    }

    public static void main(String[] args) {
        int[] a = {1, 4, 3, 9};
        double[] d = {1.0, 4.1, 3.3, 9.4};
        char[] c = "ALLOWEDforReal".toCharArray();
        String[] s = {"Any", "How", "Is", "a", "goal"};
        System.out.println(new SearchAnyArray<>(a).returnItem(2));
        System.out.println(new SearchAnyArray<>(d).returnItem(2));
        System.out.println(new SearchAnyArray<>(c).returnItem(2));
        System.out.println(new SearchAnyArray<>(s).returnItem(2));

        System.out.println(new SearchAnyArray<>(a).returnItemIndex(3));
        System.out.println(new SearchAnyArray<>(d).returnItemIndex(3.3));
        System.out.println(new SearchAnyArray<>(c).returnItemIndex('L'));
        System.out.println(new SearchAnyArray<>(s).returnItemIndex("Is"));

    }
}```

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多