【发布时间】: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