2017-01-19 3 views
0

Я пытаюсь создать итеративную функцию двоичного поиска как часть части работы.Итеративный двоичный поиск - String Array

Я попытался найти похожие проблемы, но они имеют тенденцию относиться к целым массивам, а не к строковым массивам.

Я думаю, что проблема с моим кодом связана с тем, что операторы сравнения строк не выполняются должным образом.

Если я запускаю код с некоторыми основными данными тест я получаю «java.lang.NullPointerException»

Если кто-то может взглянуть на мой код и указать, где я буду неправильно было бы значительно оценили. Благодаря!

public int returnIndex(String searchValue) 
    { 
    int min = 0; 
    int max = data.length -1; 
    int mid; 

    while (min <= max) { 
     mid = min + (max - min)/2; 
     if (data[mid].compareTo(search) == 0) 
     { 
     return mid; 
     } 
     else if (data[mid].compareTo(search) > 0) 
     { 
     min = mid + 1; 
     } 
     else 
     { 
     max = mid - 1; 
     } 
    } 
    return -1; 
    } 

Редактировать: Я включил свою инициализацию и тестовый код.

public class SortedVector 
{ 
    private int maxlength; 
    private int numberofitems; 
    private String[] data; 
    private int growby; 

    public SortedVector() 
    { 
    maxlength = 10; 
    numberofitems = 0; 
    data=new String[maxlength]; 
    growby = 10; 
    } 

В Main.java я вызываю функцию и добавить значения в массив:

SortedVector Vector = new SortedVector(); 

Vector.AddItem("Yellow"); 
Vector.AddItem("Blue"); 
Vector.AddItem("Green"); 

System.out.println("The word Yellow is held at index: " + Vector.returnIndex("Yellow")); 
+1

Где у вас это исключение? –

+2

Вы должны передать массив 'data' в качестве параметра этому методу. –

+2

Похоже, ваша проблема заключается в том, как инициализируется ваша переменная данных, и вы не предоставляете код для этого. Также возможно, что data [index] может быть нулевым значением, если не все элементы в массиве были инициализированы действительным объектом String. – mba12

ответ

-2

Я думаю, что вы добавили только 3 элементы в вектор, но инициализируется его на 10 пунктов. Затем вы пытаетесь получить предмет из средней позиции.

+0

Хорошо, поэтому я попробовал добавить 10 разных цветов, и если я запустил код, я не получу исключение нулевого указателя, но, тем не менее, он считает, что желтый удерживается в индексе -1. – GuestUser140561

+0

@ GuestUser140561 Этот массив должен быть отсортирован для использования двоичного поиска. –

+0

Я думаю, что есть проблема с инициализацией. Не могли бы вы добавить код для этого? – Nequeq

1

Массив data должен быть отсортирован, прежде чем применять этот алгоритм. Кроме того, я настоятельно рекомендую передать этот массив data методу в качестве параметра.

+0

О, ладно. В какой момент я сортирую данные? Это когда я добавляю элемент в массив? – GuestUser140561

+0

Вы можете просто добавить их, как если бы они были отсортированы, т. Е. «Добавить» A », добавить (« B »)'. –

+0

Это имеет смысл. Благодарю. Я изменил свой код, но он все равно возвращает -1 в качестве индекса для любого значения поиска. Это почти как мой цикл while не выполняется. – GuestUser140561

Смежные вопросы