问题是使用二进制搜索技术搜索单词并给出其位置。我接受数组中的所有单词,然后使用 Arrays.sort 。然后我使用 binarySearch()函数来搜索用户接受的单词,但单词的位置没有正确显示。 它提供随机输出,我无法理解为什么!我写for-loop的方式可能有问题! 我附加了一个带有多个输出的输出屏幕。
如果有人能帮助我,那就太棒了!谢谢:)
import java.util.*;
import java.util.Arrays;
public class BinarySearch10
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int i;
System.out.println("Enter number of words you wish to input: ");
int n=sc.nextInt();
String[] words= new String[n];
System.out.println("Enter the words");
for ( i = 0; i < words.length; i++)
{
System.out.print("WORD " + (i + 1) + ": ");
words[i] = sc.next();
}
System.out.println("enter the word you want to search for");
String word=sc.next();
Arrays.sort(words);
int index= Arrays.binarySearch(words,word);
System.out.println(word+ "="+ index);
}
答案 0 :(得分:0)
您正在获取随机值,因为您首先对数组进行排序,
排序后索引被更改
答案 1 :(得分:0)
因为Arrays.sort
是就地排序。这意味着当您对单词进行排序时,它们的位置已经更改:新顺序将是词典(按字母顺序)顺序。这是一个例子:
// before the sort
// words = ["word-b", "word-c", "word-a"]
Arrays.sort(words);
// after the sort
// words = ["word-a", "word-b", "word-c"]
如您所见,单词word-c
已将其位置从索引1更改为索引2.
一个简单的解决方案是避免在这里使用排序和二进制搜索。你可以使用for循环找到这个词:
for (int i = 0; i < words.length; i++) {
if (searchWord.equals(words[i])) {
// word found at index i
}
}
如果你想继续使用sort工作,你需要使用Map
来存储每个单词的初始位置(索引):地图的关键是单词,地图的值是单词初始索引。
答案 2 :(得分:0)
根据附图,输出似乎是正确的。按字母顺序排序数组后(使用Array.sort()
),元素的顺序为:
是的,你好,怎么样,你。
&#34;你&#34;的指数是输出中的3。对于第二个示例也是如此,其中&#34;的索引是&#34;是0。