2012-03-19 5 views
0

У меня есть домашнее задание, и он просто создает алгоритм линейного поиска в java. Тем не менее, я также хочу, чтобы этот код работал с любыми типами данных, такими как Strings, ints, doubles и т. Д. И различными типами контейнеров, такими как массивы, хэшеты, списки и коллекции, поэтому мне не придется тратить так много лишних линии для перегрузки метода. Вот текущий код.Линейный поиск Generics

public class Search 
{ 
    public int linear (Object[] contents, Object query) 
    { 
     for (int index = 0; index < contents.length; ++index) 
     { 
      if (query.equals(contents[index])) 
      { 
       return index; 
      } 
     } 
     return -1; 
    } 
} 

Однако в моем другом классе для тестирования у меня есть массив int и int для поиска. Я получаю сообщение об ошибке «Метод linear (Object [], Object) в типе« Поиск »не применим для аргументов (int [], int)«

+2

Что вы собственно вопрос? – VeeArr

+0

Woops Я забыл добавить вопрос. Исправлено: haha ​​ –

+1

Объект [] и int [] не являются эквивалентными. –

ответ

3

int не является объектом, это примитив. вы можете указать Integer []. Еще лучше, вы должны использовать дженерики. Вы также можете использовать список вместо массива (просто мысль): я показываю оба ниже.

import java.util.List; 
public class LinearSearch<E> 
{ 
public int linear (E[] contents, E query) 
{ 
    for (int index = 0; index < contents.length; ++index) 
    { 
     if (query.equals(contents[index])) 
     { 
      return index; 
     } 
    } 
    return -1; 
} 

public int linear (List<E> contents, E query) 
{ 
    for (int index = 0; index < contents.size(); ++index) 
    { 
     if (query.equals(contents.get(index))) 
     { 
      return index; 
     } 
    } 
    return -1; 
} 
} 
+0

Каковы преимущества использования списка? –

+0

Вы можете использовать все лакомства, которые поставляются с API коллекций: http://docs.oracle.com/javase/tutorial/collections/ – kasavbere

+0

Наконец-то я надеюсь, что это не раздражает вас и не обувает вас. Но если использование объекта работает также, какое преимущество предоставляют дженерики? –

0

Такая же проблема, но с новой установкой из-за обновленного IDE для JavaSE 1,8

public static <E extends Comparable<>> int linear (E[] contents, E query) { 
    for (int index = 0; index < contents.length; ++index) 
    { 
     if (query.equals(contents[index])) 
     { 
      return index; 
     } 
    } 
    return -1; 
} 

Без:

<E extends Comparable<>> 

вы получаете E не может быть разрешен к типу.

Для того, чтобы использовать метод, который вы должны создать массив, используя

Integer[] intArray = {23,45,21,55,234,1,34,90}; 

и НЕ

int[] intArray = {23,45,21,55,234,1,34,90}; 

Тогда для вызова метода:

System.out.println("Key found at Index: " + linear(intArray, 21)); 
+0

Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (https://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (https://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (https://stackoverflow.com/help/ Что-репутация). - [Обзор] (/ review/low-quality-posts/16723298) – EJoshuaS

+0

Если у вас есть новый вопрос, пожалуйста, спросите его, нажав кнопку [Ask Question] (https://stackoverflow.com/questions/ask). Включите ссылку на этот вопрос, если это поможет обеспечить контекст. - [Из обзора] (/ review/low-quality-posts/16723298) –

+0

Хорошо, я некоторое время собираюсь выполнять stackoverflow, я часто использую опцию поиска, чтобы ответить на мои вопросы, не задавая вопрос. Но я часто вижу, что вопросы людей дублируют дубликаты и, таким образом, остаются без ответа, просто пытаясь избежать этого. Кажется, обоюдоострый меч. –

Смежные вопросы