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

时间:2016-09-18 20:20:34

标签: java arrays string search binary

程序从排序字符串的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, 0, 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);

}

}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如何比较String s(或任何其他类型的Comparable个对象):

  • a > b变为a.compareTo(b) > 0
  • a < b变为a.compareTo(b) < 0
  • a == b变为a.equals(b)