我有以下需要解决的问题,但是有点尴尬。如果有人可以提供帮助,我将非常感激。
简而言之,可以归结为以下几点:
我有搜索密钥的代码,但我不知道如何返回上面提到的索引......
import java.util.Arrays;
public class BinarySearchIndex2 {
// a working recursive version
public static int search(String key, String[] a) {
return search(key, a, 0, a.length);
}
public static int search(String key, String[] a, int lo, int hi) {
// possible key indices in [lo, hi)
if (hi <= lo) return -1;
int mid = lo + (hi - lo) / 2;
int cmp = a[mid].compareTo(key);
if (cmp > 0) return search(key, a, lo, mid);
else if (cmp < 0) return search(key, a, mid+1, hi);
else return mid;
}
public static void main(String[] args) {
String key = args[0];
int sizeoflist = StdIn.readInt();
String[] a = new String[sizeoflist];
int counter = 0; //counter for while loop to fill array a
while (!StdIn.isEmpty()){
a[counter] = StdIn.readString();
counter++;
}
Arrays.sort(a); // sort the words (if needed)
if ( search(key, a) < 0) ; /* System.out.println();*/
else if ( search(key, a) > 0 ) ;
else if ( search(key, a) = 0 ) ;
}
}
如果有人可以帮我解决这个问题会很高兴......
谢谢!
答案 0 :(得分:1)
重点在于:
if (hi <= lo) return -1;
当你有一个子数组来搜索大小为零时会发生这种情况,这意味着该元素不存在。现在想一想:规范对这里的返回值有什么看法?
答案 1 :(得分:1)
String.compareTo
执行字典比较。这意味着它可以决定“50”>“100”,而显然50 <100是您所期望的。这将影响您的Arrays.sort
调用,因此您的数组已经搞砸了。
是否必须将public static int search(String key, String[] a)
作为您的API?
如果您可以将其更改为public static int search(int key, int[] a)
,那么它将使您的API正常工作(假设您没有我错过的任何错误)。
希望这就是你所指的。
编辑:对问题分析进行了一些精细调整。