2017-01-19 5 views
0

Ich versuche, eine iterative binäre Suchfunktion als Teil einer Arbeit zu erstellen.Iterative binäre Suche - String Array

Ich habe versucht, nach ähnlichen Problemen zu suchen, aber sie neigen dazu, alle für Integer-Arrays statt String-Arrays zu sein.

Ich denke, das Problem mit meinem Code ist mit den String-Vergleichsoperatoren nicht ordnungsgemäß ausgeführt.

Wenn ich den Code mit einigen grundlegenden Testdaten laufen bekomme ich ein „java.lang.NullPointerException“

Wenn jemand einen Blick auf meinem Code nehmen und zeigen, wo ich falsch geht wäre es sehr geschätzt. Vielen Dank!

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; 
    } 

Edit: Ich habe meine Initialisierung und Testcode enthalten.

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; 
    } 

Im main.java nenne ich die Funktion und fügen Sie Werte in das Array:

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

Wo erhalten Sie diese Ausnahme? –

+2

Sie sollten das Array 'data' als Parameter an diese Methode übergeben. –

+2

Sieht für mich so aus, als ob Ihr Problem darin liegt, wie Ihre Datenvariable initialisiert wird und Sie den Code dafür nicht bereitstellen. Es ist auch möglich, dass data [index] ein Nullwert sein kann, wenn nicht alle Elemente im Array mit einem gültigen String-Objekt initialisiert wurden. – mba12

Antwort

-2

Ich glaube, du hast nur drei Elemente Vektor hinzugefügt, aber initialisiert es 10 Stück für. Dann versuchst du einen Gegenstand von der mittleren Position zu bekommen.

+0

Okay, also habe ich versucht, 10 verschiedene Farben hinzuzufügen, und wenn ich den Code ausführen, bekomme ich keine Nullzeiger-Ausnahme, aber es denkt, dass Gelb bei Index -1 gehalten wird. – GuestUser140561

+0

@ GuestUser140561 Dieses Array muss zur Verwendung der binären Suche sortiert werden. –

+0

Ich denke, es gibt immer noch ein Problem mit der Initialisierung. Könnten Sie Ihren Code dafür hinzufügen? – Nequeq

1

Das Array data muss sortiert werden, bevor Sie diesen Algorithmus anwenden. Außerdem empfehle ich dringend, dieses data-Array als Parameter an die Methode zu übergeben.

+0

Oh, okay. An welchem ​​Punkt sortiere ich die Daten? Ist es, wenn ich ein Element zum Array hinzufüge? – GuestUser140561

+0

Sie können sie einfach hinzufügen, als wären sie sortiert, d. H. 'Addiere" A ", addiere (" B ")'. –

+0

Das macht Sinn. Vielen Dank. Ich habe meinen Code geändert, aber immer noch -1 als Index für einen beliebigen Suchwert zurückgegeben. Es ist fast so, als würde meine while-Schleife nicht ausgeführt. – GuestUser140561