2013-01-10 192 views
1

我需要發送一個整型數組和字符串數組,這個通用的方法,並找出如果某個數字或字符串存在有或not.I寫了這個代碼,但它給了一個錯誤就行了if(e==30)說那「Incompatible operand types E and int」。請幫忙。泛型方法

public class Ch2Lu3Ex2 
{ 
    public static <E> void searchArray(E[] inputArray) 
    { 
    for(E e : inputArray) 
    { 
     if(e==30) 
     { 
      System.out.println("Element found in integer array"); 
     } 
     else if(e=="raj") 
     { 
      System.out.println("Element found in string array"); 
     } 

    } 
    } 

public static void main(String[] args) 
    { 
     Integer[] integerArray = {10,20,30}; 
     String[] stringArray = {"robin","raj","ravi"}; 
     searchArray(integerArray); 
     searchArray(stringArray); 
    } 
    } 
+0

有很多事情錯在這裏,他們是,你應該(幾乎)從不使用''==但'等於()'比較對象的拳頭,其次你並不需要仿製藥在所有的這個。 – biziclop

回答

1

有兩個錯誤,他們都必須是固定的:

1)修復它想:if(e instanceof Integer && (Integer)e==30) - 你必須檢查即eInteger

2)String小號實例必須使用equals方法進行比較:

else if(e.equals("raj"))

+0

Integer應該與equals相當。 – assylias

+1

@assylias,我不同意。在這種情況下,與'(int)'常量比較,所以沒問題。 – Andremoniy

+0

好點,整數將被取消裝箱並且'=='將比較'ints'。 – assylias

3

的問題是,你不知道,如果eIntegerString,你不能用Integer,反之亦然比較一String

一個解決辦法是在尋求項目傳遞給你的方法太 - 它可能是這樣的:

public static <E> void searchArray(E[] inputArray, E soughtItem) { 
    for (E e : inputArray) { 
     if (e.equals(soughtItem)) { 
      System.out.println("Element found in integer array"); 
     } 
    } 
} 

而在你的主代碼:

searchArray(integerArray, 30); 
searchArray(stringArray, "raj"); 

另外請注意,您應該使用equals而不是==進行相等性測試。

最後,這一切已被寫入別人:

Set<String> set = new HashSet<String> (stringArray); 
if (set.contains("raj")) System.out.println("Found raj"); 
+0

或者乾脆:'公共靜態無效searchArray(對象[] inputArray,對象soughtItem)' – biziclop

+0

@biziclop你的方法就可以被稱爲:'searchArray(someIntegerArray, 「ABC」);'這可能是你想要的東西,以防止在編譯時間。 – assylias

+0

夠公平的,雖然返回false通常是可以接受的。 – biziclop

1

不要使用 「==」 當你比較的對象!更改爲「equals()」方法,並應該工作!

public class Ch2Lu3Ex2 
{ 
    public static <E> void searchArray(E[] inputArray) 
    { 
    for(E e : inputArray) 
    { 
     if(e.equals(30)) 
     { 
      System.out.println("Element found in integer array"); 
     } 
     else if("raj".equals(e)) //This way no null pointer will occure 
     { 
      System.out.println("Element found in string array"); 
     } 

    } 
    } 

public static void main(String[] args) 
    { 
     Integer[] integerArray = {10,20,30}; 
     String[] stringArray = {"robin","raj","ravi"}; 
     searchArray(integerArray); 
     searchArray(stringArray); 
    } 
    } 
+0

謝謝你這麼多:) – Robin

+2

+1爲空指針觀察。爲什麼不把相同的邏輯應用於e.equals(30)?你也會在那裏得到一個空指針,在它進入第二個比較之前:-P – tucuxi