在字符串数组中搜索单词&使用二进制搜索技术给出它的位置

时间:2017-02-16 10:34:14

标签: java arrays string sorting binary-search

问题是使用二进制搜索技术搜索单词并给出其位置。我接受数组中的所有单词,然后使用 Arrays.sort 。然后我使用 binarySearch()函数来搜索用户接受的单词,但单词的位置没有正确显示。 它提供随机输出,我无法理解为什么!我写for-loop的方式可能有问题! 我附加了一个带有多个输出的输出屏幕。

output screen

如果有人能帮助我,那就太棒了!谢谢:)

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);


}

3 个答案:

答案 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.

解决方案1 ​​

一个简单的解决方案是避免在这里使用排序和二进制搜索。你可以使用for循环找到这个词:

for (int i = 0; i < words.length; i++) {
    if (searchWord.equals(words[i])) {
        // word found at index i
    }
}

解决方案2

如果你想继续使用sort工作,你需要使用Map来存储每个单词的初始位置(索引):地图的关键是单词,地图的值是单词初始索引。

答案 2 :(得分:0)

根据附图,输出似乎是正确的。按字母顺序排序数组后(使用Array.sort()),元素的顺序为: 是的,你好,怎么样,你。 &#34;你&#34;的指数是输出中的3。对于第二个示例也是如此,其中&#34;的索引是&#34;是0。