比较字符串与数组字符串和二进制搜索 [英] Comparing string to array string and binary searching
问题描述
程序从排序字符串的txt文件中读取,并使用顺序,迭代二进制和递归二进制来存储在数组中,然后搜索数组中的位置以及查找该字所需的迭代次数。当我尝试将数组中的单词与用户输入的单词进行比较时出错。不知道为什么。
2)希望有人可以解释迭代二进制和递归二进制之间的差异。
3)为什么有必要这样做...
Program reads from a txt file of sorted strings and uses sequential, iterative binary and recursive binary to store in array then search array for location and how many iterations it took to find the word. Having an error when I try to compare a word in array to the word the user imputs. Not sure why. 2) Hoping someone can explain the differences between iterative binary and recursive binary. 3) Why is it necessary to do this...
SearchString si = new SearchString();
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.compareTo
You cannot compare String
with ==
(or >
and <
). You need to use
String.compareTo
这篇关于比较字符串与数组字符串和二进制搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!