2012-12-07 209 views
1

我想弄清楚如何創建一個方法來找到一個數組中的字符串,並打印出來的字符串與其索引。我認爲方法簽名是正確的,但我無法弄清楚如何返回方法中的字符串值。搜索數組

String name = search(array,"Dog"); //the method implementation in main 
System.out.println(name); 

public static int search(String[] array, String key) 
{ 
    for (int i= 0; i< array.length; i++) 
     { 
     if (array[i] == key) 
     return i; 
     } 
    return ("Name cannot be found in array); 
} 
+0

嗯。爲什麼你的返回類型是'int',如果你想在第一個地方返回'String'? –

+0

如果找不到元素,則返回-1而不是String。這是標準做法。 –

回答

5

您不能從聲明爲返回int的方法返回String。最常見的方式來表示失敗的返回超出範圍的值:

return -1; 

或者拋出一個異常:

throw new NameNotFoundException("Name cannot be found in array"); 

另外,該線路將無法正常工作:

if (array[i] == key) 

字符串需要是compared with equals(), not ====操作員檢查字符串是否與對象相同,而不是它們的內容是相同的。

if (key == null && array[i] == null || 
    key != null && key.equals(array[i])) 

並確保您不要在空引用上調用.equals()。上面的代碼檢查這種可能性。

+0

那麼,我看到OP代碼中至少有3個問題。可能你可以解決所有這些問題。 –

+0

我修正了......明顯愚蠢的錯誤......然後我有了一個epihpany並使用一個bool值將它變成了一個循環。現在奇妙地工作XD感謝您的幫助 – user1780311

1

如果你想返回String,然後......你的返回類型應該是String,不int

此外,您不應使用==String s,或者與大多數對象一起使用array[i].equals(key)

4

爲什麼要返回字符串?調用這種方法的人已經知道字符串是什麼,因爲他們必須首先提供它。 (否則怎麼會知道你在找什麼:P)

你也應該做array[i].equals(key)

==用於對象相等。 .equals()是爲了價值的平等。

0

首先解決您的比較中使用的equals方法:

if (array[i].equals(key)) 

還改變最後return語句爲:

return -1; //string not found 

後來乾脆這(使用數組[searchIndex]得到的字符串):

int searchIndex = search(array,"Dog"); 
if(i >= 0){ 
    System.out.println("String="+array[searchIndex] + ", Array Index="+searchIndex); 
}else{ 
    System.out.println("String not found"); 
} 
0

你已經有了你正在搜索的字符串值。爲什麼你需要回報? 只是返回指數

int index = search(array,"Dog"); 
1

最大的問題是,爲什麼執行搜索時的Java已經實現了它適合你?

String[] array; 
String val = "Dog"; 

if(Arrays.asList(array).contains(val)){ 
     System.out.println("your string is found"); 
} else { 
     System.out.println("your string is found"); 
} 

或者更好的是真實的你實現

String[] array; 
String val = "Dog"; 
String name = (Arrays.asList(array).contains(val)) ? val : "Name cannot be found in array"; 

應該指出的是,Arrays.asList不會複製數組只是把它包裝在列表結構,使得它可以作爲一個枚舉對待。這種方法的性能與您提供的大致相同。

+0

因此,您創建一個*列表*出陣列,只是爲了找出它是否包含一個值?談論低效的代碼... – thkala

+0

實際上Arrays.asList是極其高效的,因爲沒有執行數據複製,它只是返回已經存在的String []的列表視圖。兩種方法都以O(n)運行,並且可以縮放相同。沒有理由避免這種方法。 - 學習喲Java之前,你在這裏doubtin我的兒子.... – gbtimmon

+0

更多請參閱這裏http://stackoverflow.com/questions/1552783/performance-of-arrays-aslist – gbtimmon

0

你可以試試這個.............

import java.util.*; 
public class xyz { 
public static void main(String [] args){ 
    String [] sa = {"abc","def","ghi"}; 
    Arrays.asList(sa); 
    Arrays.sort(sa); 
    for(String s : sa){ 
     System.out.println(s); 
    } 
} 

}