2015-02-12 3 views
0

У меня есть arraylist sArray, который содержит большой список правильно записанных слов. Мне нужно отправить слово на этот рекурсивный метод двоичного поиска (ключ) и определить, правильно ли оно написано или нет. Я понимаю, как работает рекурсивный бинарный поиск, но я не уверен, как определить, нужно ли мне идти влево или вправо в поиске sArray с моим ключевым словом, поскольку я имею дело со строками, а не целыми числами.Рекурсивный двоичный поиск Java

public int bSearch(String key, int lowIndex, int highIndex) { 

    if (lowIndex > highIndex) { 
     System.out.print("The word is incorrect"); 
     return -1; 
    } 

    mid = (lowIndex + highIndex)/2; 
    if (sArray.get(mid).equals(key)) { 
     return mid; 
    } else if (key < sArray.get(mid)) { 
     return bSearch(key, lowIndex, mid - 1); 
    } else { 
     return bSearch(key, mid + 1, highIndex); 
    } 
} 

ответ

0

Метод CompareTo позволяет сравнить любой объект, который реализует Сопоставимые интерфейс. Поскольку класс String реализует интерфейс Comparable, compareTo будет работать в вашем методе.

Удобный трюк, чтобы помнить при использовании CompareTo думает о нем, как вычитание:

a.compareTo (б) возвращает -1, если а - Ь приводит к отрицательному ответу. (a перед b перед заказом)

a.compareTo (b) вернет 1, если a - b даст положительный ответ. (А приходит после того, как б при заказе их)

a.compareTo (б) вернет 0, если а - Ь приводит к 0. (а и Ь идентичны при заказе)

Итак ...

if (key.compareTo(midValue) < 0) { 

     //look to the left of mid 
}... 
0

Вы можете так же легко сравнивать строки как целые числа:

if (testString.compareTo(key) < 0) { 
    ... 
} else if (testString.compareTo(key) > 0) { 
    ... 
} else { 
    ... 
} 
Смежные вопросы