Как найти конкретную переменную в массиве различного типа, используя универсальный метод? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь вернуть определенную переменную в различных типах массивов, которые я могу использовать только универсальным методом. Однако, когда я пытаюсь сделать метод поиска, я продолжаю получать эту ошибку. Кто-нибудь может дать мне некоторое представление, как это исправить?

Я использую 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 

Элемент, возвращаемый из целочисленного массива: 3

Элемент, возвращаемый из целочисленного массива: 3.3

Элемент, возвращаемый из целочисленного массива: L

1 Ответ

0 голосов
/ 29 апреля 2019

@ Нет, я предлагаю вам создать класс с ожидаемым типом данных в качестве параметра и временем arry в качестве аргумента в конструкторе. Тогда ваш общий возврат товара по ключу или возврат ключа по товару может мир.

Если не слишком много. Рассмотрим мою реализацию ниже:

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"));

    }
}```
...