Я должен написать последовательный/линейный поиск в массиве String. Я очень близок к финишу, но часть задания меня смущает. Он говорит, что сравнить целевой объект с последующим элементом списка до тех пор, пока цель или цель не будет равна , менее, чем текущий элемент массива. Как строка может быть больше или меньше, чем другой элемент, когда нет числового значения? Возможно, я просто не думаю об этом правильно. Вот моя программа до сих пор:Последовательный поиск в массиве String в 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
Любой помощь понимания назначения и фиксация исключения было бы оценен.
Для справки: вы не можете сравнивать значения String с помощью == и! =, Это не работает (оно сравнивает только «адреса» объектов). Вы должны использовать string1.equals (string2) – huelbois
Используйте 'String # compareTo' для сравнения строк. Вот связанный с этим вопрос, который объясняет больше: http://stackoverflow.com/questions/4064633/string-comparison-in-java. –
Что касается запроса «меньше», Java String реализует Comparable. Когда вы вызываете Comparable.compareTo() для сравнения объекта с другим, возвращаемое значение указывает на относительный естественный порядок объектов. В случае с Строками естественный порядок лексикографичен. –