我應該在字符串數組上編寫順序/線性搜索。我很接近完成,但部分任務讓我困惑。它說比較目標項目與列表的連續元素,直到目標匹配或目標是小於比數組的當前元素。當沒有數值時,字符串如何能比另一個元素更多或更少?也許我只是沒有正確地考慮它。這是我的計劃至今:在Java中的字符串數組上的順序搜索
public class SequentialSearchString {
public static boolean sequential (String[] numbers){
//Set the target item to an arbitrary String that should return true.
String T1 = "Frank";
for (int i = 0; i < numbers.length; i++){
if (numbers[i] == T1){
return true;
}
if (numbers[i] != T1){
numbers[i] = numbers[i+1];
}
}
return false;
}
public static boolean sequential2 (String[] numbers){
//Set the target key to String that should return false.
String T2 = "Ian";
for (int i = 0; i < numbers.length; i++){
if (numbers[i] == T2){
return true;
}
if (numbers[i] != T2){
numbers[i] = numbers[i+1];
}
}
return false;
}
public static void main(String[] args) {
//Create a list of 8 Strings.
String [] numbers =
{"Ada", "Ben", "Carol", "Dave", "Ed", "Frank", "Gerri", "Helen", "Iggy", "Joan"};
//If the first target item (T1) is found, return Succuss. If not, return failure.
if (sequential(numbers) == true){
System.out.println("Success. 'T1' was found");
}
else {
System.out.println("Failure. 'T1' was not found");
}
//If the second target item (T2) is found, return Succuss. If not, return failure.
if (sequential2(numbers) == true){
System.out.println("Success. 'T2' was found");
}
else {
System.out.println("Failure. 'T2' was not found");
}
}
}
第一種方法工作正常,但我似乎具有搜索不在列表中的元素的問題。這裏是我運行程序後得到的錯誤信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at SequentialSearchString.sequential2(SequentialSearchString.java:32)
at SequentialSearchString.main(SequentialSearchString.java:50)
Success. 'T1' was found
任何幫助理解分配和修復異常將不勝感激。
有關信息:您無法使用==和!=來比較字符串值,但它不起作用(它僅比較對象的「地址」)。你必須使用string1.equals(string2) – huelbois 2012-02-15 22:50:08
使用'String#compareTo'來比較字符串。這裏有一個相關的問題解釋更多:http://stackoverflow.com/questions/4064633/string-comparison-in-java。 – 2012-02-15 22:55:07
對於「少於」請求,Java String實現了Comparable。當您調用Comparable.compareTo()以將一個對象與另一個對象進行比較時,返回值指示對象的相對自然順序。在字符串的情況下,自然順序是詞典。 – 2012-02-15 23:01:43