Я отлаживаю ошибочные результаты поиска из моего класса класса объектов. В этом текущем проекте нам потребовалось построить упорядоченный разворачиваемый список ссылок и запустить поиск по содержимому, а затем вернуть подсписку элементов из открытой начальной точки в конечную конечную точку. Для этого мне нужно найти внутренний массив, чтобы найти индексную точку элемента start. Я делаю это путем двоичного поиска, но так как это возвращает только первое найденное совпадение, и перед ним могут быть другие совпадения, мне нужно вернуться в массив, чтобы найти первое истинное соответствие. Я делаю это с помощьюПочему compareTo возвращает true, когда он должен быть ложным?
//get first index match, work backwards
int index= binarySearch(node.items, 0, node.numUsed, item, comp);
while (index>0 && comp.compare(node.items[index], item)==0){
index--;
}
Профессор предоставляется код тестирования, который разбивает строку и добавляет каждый символ в качестве элемента конструкции. Он также включил вложенный класс StringCmp, который упоминается как comp
в объявлении бинарного поиска выше. Его сравнить метод
public int compare(String s1, String s2) {
cmpCnt++;
return s1.compareTo(s2);
}
Однако при выполнении теста на методе Подсписок от я к о, этот метод возвращает истинное значение, когда comp.compare(h,i)==0
и это бросает мои результаты Начнитесь из класса поиска я написал. Первоначально я компенсировал return index++
, которого хватило, чтобы пройти структурный тест, но сбросил ожидаемую начальную точку на единицу.
Так почему же это возвращает истину, когда она явно ложна?
РЕДАКТИРОВАТЬ добавлена распечатка методы подсписка, как ожидаются, работать с я к о
тесты Строка ввода = abcdefghijklmnopqrstuvwxyzaeiou
Возвращения из Подсписка метода:
фрагмент 1 (используется 4 из 10): [ч] [ я] [I] [J]
фрагмент 2 (используется 4 из 10): [K] [L] [м] [п]
Н не должен быть в списке на всех, но comp.compare(node.items[index], item)==0
возвращает true, что i == h, что, очевидно, неверно.
Редактировать два Второй часть проекта требует от нас, чтобы разобрать текстовый файл, создавать объекты Song от исполнителя, название и тексты песен полей, а затем запустить поиск по названиям с использованием префикса. Ошибка, возникающая здесь, не встречается в одно-и многобуквенном поиске, поэтому я думаю, что проблема связана с вложенным классом StringCmp в тесте.
ли BinarySearch просто позвонить 'Arrays.binarySearch (T [], Int, Int, String, компаратор super T>)'? – Powerlord
Я написал свою собственную реализацию бинарного поиска. Когда прослеживается через отладчик, он работает с и без действительных поисков. – Jason