程序从经过排序的字符串的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); }
}
您无法String与==(或>和<)进行比较。您需要使用 String.compareTo
String
==
>
<
String.compareTo