2017-01-19 1 views
0

Je suis en train de créer une fonction de recherche binaire itérative dans le cadre d'un travail.binaire itératives Recherche - Chaîne Tableau

J'ai essayé de chercher des problèmes similaires, mais ils ont tendance à être tous pour les tableaux entiers plutôt que des tableaux de chaînes.

Je pense que le problème avec mon code est de faire avec les opérateurs de comparaison de chaînes ne pas exécuter correctement.

Si je lance le code avec des données de test de base je reçois un « java.lang.NullPointerException »

Si quelqu'un pouvait jeter un oeil à mon code et le point où je vais mal, il serait grandement apprécié. Merci!

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

Édition: J'ai inclus mon code d'initialisation et de test.

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

Dans le main.java j'appelle la fonction et ajouter des valeurs au tableau:

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

Où trouvez-vous cette exception? –

+2

Vous devez passer le tableau 'data' comme paramètre à cette méthode. –

+2

Me semble que votre problème est dans la façon dont votre variable de données est initialisée et vous ne fournissez pas le code pour cela. Il est également possible que data [index] soit une valeur nulle si tous les éléments du tableau n'ont pas été initialisés à un objet String valide. – mba12

Répondre

-2

Je pense que vous avez ajouté seulement 3 éléments à vecteur mais initialisés pour 10 articles. Ensuite, vous essayez d'obtenir l'article de la position médiane.

+0

Ok, donc j'ai essayé d'ajouter 10 couleurs différentes et si je cours le code je n'obtiens pas une exception null-pointer, mais il pense cependant que Yellow est maintenu à l'index -1. – GuestUser140561

+0

@ GuestUser140561 ce tableau doit être trié pour utiliser la recherche binaire. –

+0

Je pense qu'il y a toujours un problème avec l'initialisation. Pourriez-vous ajouter votre code pour cela? – Nequeq

1

Le tableau data doit être trié avant d'appliquer cet algorithme. En outre, je recommande vivement de passer ce tableau data à la méthode en tant que paramètre.

+0

Oh, d'accord. À quel moment dois-je trier les données? Est-ce quand j'ajoute un élément au tableau? – GuestUser140561

+0

Vous pouvez simplement les ajouter comme s'ils étaient triés, c'est-à-dire 'ajouter" A ", ajouter (" B ")'. –

+0

Cela a du sens. Merci. J'ai modifié mon code, mais il renvoie toujours -1 comme index pour toute valeur de recherche. C'est presque comme si ma boucle ne s'exécutait pas. – GuestUser140561