2013-08-06 7 views
-1

Вот код, который я пытаюсь выполнить., Очевидно, что код возвращает значение -negative, Но любая причина, почему он возвращает -7 ?? Я смутно понимаю, что он основан на длине прихода, но может кто-то объяснить больше. Спасибо за вашу помощь.Информация о значении индекса., Java.util.Array

public class FindNumberFromBinary { 
    String myBubbleStr[] = {"Zoon","Hello","World", "Yep", "Yow", "MyData"}; 

    public String findString() { 
     System.out.println(Arrays.binarySearch(myBubbleStr, "yow")); 

     return ""; 
    } 
    public static void main(String args[]){ 
     FindNumberFromBinary fnb= new FindNumberFromBinary(); 
     fnb.findString(); 
    } 
} 
+1

Вы можете использовать только бинарный поиск по отсортированному массиву. В несортированном массиве результат не определен. –

+0

Возможный дубликат [java Arrays.binarySearch проблема] (http://stackoverflow.com/questions/3674173/java-arrays-binarysearch-problem) – DannyMo

+0

Tks, Вы правы, но я был смущен, когда компилятор дал мне значение от -7 для System.out. Любые tghts, очень оценили. –

ответ

3

Ваш массив должен быть отсортирован для успешного выполнения binary search algorithm.

После того, как его сортируют, check the documentation.

В частности:

Возвращает индекс ключа поиска, если оно содержится в массиве; в противном случае (- (точка ввода) - 1). Точка вставки определяется как точка, в которой ключ будет вставляться в массив: индекс первого элемента больше ключа или a.length, если все элементы в массиве меньше указанного ключа. Обратите внимание, что это гарантирует, что возвращаемое значение будет> = 0 тогда и только тогда, когда ключ найден.

Мы знаем, что элемент не существует в этом массиве, так как возвращаемое значение отрицательно. Также документы говорят -7: -(insertion point -1). Давайте сделаем математику и вычислим, где этот элемент должен быть, если мы хотим вставить в отсортированном порядке.

-(-7+1) = 6 

Таким образом, положительная, реальная точка вставки мы хотим в этом случае 6.

Поскольку ваш массив не отсортирован, это значение бесполезно. Просто помогите, когда это произойдет, как только ваш массив будет отсортирован.

+0

Спасибо. Я тоже надеялся на -6. Но выход компилятора был -7. Это немного смутило меня. –

+0

Такое поведение приятно, когда вы это понимаете, но сначала сбиваете с толку. Не забудьте отсортировать массив до запуска двоичной сортировки. Это самая большая проблема здесь. Также причиной является отрицательное значение -7, а не -6, потому что будет неопределенность в индексе 0 без -1 in - (insertionPoint-1) –

2

Вы искали "yow", но в вашем массиве есть "Yow" (captial Y). Возвращаемое значение - это отрицательный индекс + 1, где этот элемент был бы, если бы он был в списке.

Редактировать: Кроме того, ваш массив необходимо отсортировать.

+0

Хотя верно, что массив нужно сортировать ... это также проблема. – radimpe

+0

Вы можете просто использовать цикл for для поиска строки: for (int x = 0; x Jrom

+0

Спасибо, У меня был поисковый запрос в нижнем регистре, но я не был уверен, почему я получил -7, ценность, которую я ожидал, была -6. –

1

Ваш массив необходимо отсортировать, чтобы выполнить двоичный поиск. Пожалуйста, обратитесь к этому link за аналогичный вопрос. Вы можете сортировать, используя что-то вроде этого:

java.util.Arrays.sort(myBubbleStr); 

Array.binarySearch Также не выполняет регистрозависимость матча. Yo передал неправильный аргумент методу binerysearch. Это должно быть что-то вроде этого:

Arrays.binarySearch(myBubbleStr, "Yow"); 

, потому что ваш массив содержит «Йоу» не «Оттавы»

0

Это возвращение -7 по нескольким причинам.

  1. Возвращаемое значение отрицательно, потому что строка, которую вы ищете, отсутствует.
  2. Абсолютное значение возвращаемого значения равно 7, потому что это индекс массива, который будет искать ваш ключ поиска, если он будет присутствовать.

Второго ответ может показаться немного туманным на первом, но BinarySearch предполагается, что массив отсортирован, чтобы начать с (в лексикографическом порядке при использовании String), и ваш не является.

Смежные вопросы