2016-09-18 3 views
0

Программа читает из 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); 

} 

}

+1

Если вы есть «txt-файл отсортированных строк», почему вам нужно его сортировать? –

+1

Что и где ошибка? Какие данные обрабатывались, что вызвало это? –

+0

Метод binarySearch и метод binarySearch2. когда я сравниваю слова.Array [mid]> word2Search Сортировка неточна, отредактирован вопрос-- Оператор> не определен для типов аргументов java.lang.String, java.lang.String – DRT

ответ

0

Как сравнить String с (или любой другой тип Comparable объекта):

  • a > b становится a.compareTo(b) > 0
  • a < b становится a.compareTo(b) < 0
  • a == b становится a.equals(b)
Смежные вопросы