比较字符串与数组字符串和二进制搜索

问题描述

您无法String==(或><)进行比较。您需要使用String.compareTo

解决方法

程序从经过排序的字符串的txt文件中读取,并使用顺序的,迭代的二进制和递归的二进制存储在数组中,然后在数组中搜索位置以及查找该单词所需的迭代次数。当我尝试将数组中的单词与用户输入的单词进行比较时出现错误。不知道为什么。2)希望有人可以解释迭代二进制和递归二进制之间的区别。3)为什么需要这样做…

SearchString si = new SearchString();

程序在下面…

import ...

public class SearchString
{
public static final String TO_STOP = "-1";
public static final int NOT_FOUND = -1;
public static final int MAX_SIZE = 15000;

  public static int count1;
  public static int count2;
  public static int count3;


  public int sequentialSearch(String[] wordsArray,String word2Search)
  {
    int low = 0;
    int high = wordsArray.length - 1;
    for (int i = low; i <= high; i++)
    {
        count1++;
        if (wordsArray[i] == word2Search)
            return i;
    }
    return NOT_FOUND;
  } // end of sequentialSearch()

  public int binarySearch(String[] wordsArray,String word2Search)
  {
    int low = 0;
    int high = wordsArray.length - 1;
    while (low <= high)
    {
        int mid = (low + high)/2;
        count2++;
        if (wordsArray[mid] > word2Search){
            high = mid - 1;
        } else if (wordsArray[mid] < word2Search){
            low = mid + 1;
        } else
            return mid;
    }
    return NOT_FOUND;
  } /


  public int binarySearch2(String[] wordsArray,int low,int high,String word2Search){
    if (low > high)
        return NOT_FOUND;
    int mid = (low + high)/2;
    count3++;
    if (wordsArray[mid] > word2Search){
        return binarySearch2(wordsArray,low,mid-1,word2Search);
    } else if (wordsArray[mid] < word2Search){
        return binarySearch2(wordsArray,mid+1,high,word2Search);
    } else
        return mid;
  }



public static void main(String[] args) throws IOException
{
    Scanner keyboard = new Scanner(System.in);

    boolean wantToContinue = true;

    Scanner stringsFile = new Scanner (new File("sortedStrings.txt"));//.useDelimiter(",\\s*"); 
    List<String> words = new ArrayList<String>();

    String token1 = "";

  (stringsFile.hasNext())                           
    {     token1 = stringsFile.next();
          words.add(token1);
    }
    stringsFile.close();                                    
    String[] wordsArray = words.toArray(new String[0]);

    System.out.println(Arrays.toString(wordsArray));

    SearchString si = new SearchString();

    do {
        System.out.print("Type a word to search or -1 to stop: ");
        String word2Search = keyboard.nextLine();
        if (word2Search.equals(TO_STOP)){
            wantToContinue = false;
        } else {
            count1 = count2 = count3 = 0;
            int  index;

            index = si.sequentialSearch(wordsArray,word2Search);
            if (index == NOT_FOUND)
                System.out.println("sequentialSearch()      : " + word2Search + " is not found (comparison=" + count1 + ").");
            else
                System.out.println("sequentialSearch()      : " + word2Search + " is found in [" + index + "] (comparison=" + count1 + ").");

            index = si.binarySearch(wordsArray,word2Search);
            if (index == NOT_FOUND)
                System.out.println("iterative binarySearch(): " + word2Search + " is not found (comparison=" + count2 + ").");
            else
                System.out.println("iterative binarySearch(): " + word2Search + " is found in [" + index + "] (comparison=" + count2 + ").");

            index = si.binarySearch2(wordsArray,wordsArray.length-1,word2Search);
            if (index == NOT_FOUND)
                System.out.println("recursive binarySearch(): " + word2Search + " is not found (comparison=" + count3 + ").");
            else
                System.out.println("recursive binarySearch(): " + word2Search + " is found in [" + index + "] (comparison=" + count3 + ").");
        }
    } while (wantToContinue);

}

}