2012-03-19 46 views
0

我剛剛完成了一項家庭作業任務,它只是在java中創建一個線性搜索算法。不過,我也想讓這段代碼可以處理任何數據類型,比如字符串,整數,雙精度等等,以及不同種類的容器,比如數組,哈希集合,列表和集合,所以我不必浪費太多額外的線超載的方法。這是當前的代碼。線性搜索泛型

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來搜索。我得到一個錯誤,說「類型搜索的方法線性(對象[],對象)不適用於參數(int [],int)」

+2

你是什麼實際問題? – VeeArr 2012-03-19 21:54:41

+0

Woops我忘了添加這個問題。現在修復了哈哈 – 2012-03-19 21:59:46

+1

Object []和int []不等價。 – 2012-03-19 22:03:12

回答

3

int不是一個對象,它是一個原語。你可以使用Integer []。更好的是,你應該使用泛型。您可能還想使用list而不是array(只是一個想法):我在下面顯示。

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

使用列表的好處是什麼? – 2012-03-19 22:34:34

+0

您可以使用Collections API附帶的所有好東西:http://docs.oracle.com/javase/tutorial/collections/ – kasavbere 2012-03-19 22:39:18

+0

最後一件事,我希望這不是煩人的事情,也不是您的負擔。但是如果使用Object也可以,泛型提供了什麼優勢? – 2012-03-19 23:11:41

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

和NOT

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

則數組調用方法:

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

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](https://stackoverflow.com/questions/ask)來提問。您也可以[添加賞金(https://stackoverflow.com/help/privileges/set-bounties),以吸引更多的關注到這個問題,一旦你有足夠的[口碑](https://stackoverflow.com/help/什麼聲譽)。 - [來自評論](/ review/low-quality-posts/16723298) – EJoshuaS 2017-07-16 03:19:22

+0

如果您有新問題,請點擊[提問](https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [評論] [發表評論](/ review/low-quality-posts/16723298) – 2017-07-16 07:48:13

+0

好的,我一直在使用stackoverflow一段時間,我經常使用搜索選項來回答我的問題,但實際上並未提出問題。但我經常看到人們的問題被稱爲重複,因此沒有得到答覆,只是爲了避免這個問題。似乎是一把雙刃劍。 – 2017-07-27 22:44:03