【问题标题】:Comparing string to array string and binary searching比较字符串与数组字符串和二进制搜索
【发布时间】:2017-01-26 12:01:57
【问题描述】:

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

}

}

【问题讨论】:

  • 如果你有一个“排序字符串的txt文件”,为什么需要排序呢?
  • 错误是什么,在哪里?正在处理什么数据导致它?
  • 在 binarySearch 方法和 binarySearch2 方法中。当我比较 words.Array[mid] > word2Search 排序不准确,已编辑问题 - 运算符 > 未定义参数类型 java.lang.String、java.lang.String
  • 没有“顺序、迭代二进制和递归二进制”之类的东西。这些术语甚至在语法上都不正确:它们是一堆形容词。你少了一个名词。
  • @MikeNakis 顺序搜索。递归二进制搜索和迭代二进制搜索。那些条款不正确?您能指出我可以了解更多信息的资源吗?

标签: java arrays string search binary


【解决方案1】:

您无法将String==(或&gt;&lt;)进行比较。你需要使用 String.compareTo

【讨论】:

    【解决方案2】:

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

    • a &gt; b 变为 a.compareTo(b) &gt; 0
    • a &lt; b 变为 a.compareTo(b) &lt; 0
    • a == b 变为 a.equals(b)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2011-08-15
      • 1970-01-01
      相关资源
      最近更新 更多