2012-12-05 108 views
0

我試圖找到一個字符串中使用Arrays.binarySearch()方法,但該方法似乎是返回現在的位置是整「-5」的字符串數組的索引查找的字符串時「自由」。任何想法,爲什麼會這樣?Array.binarySearch返回負數

String[] names = {"Arken","Ben","Darklark", "Free","group"}; 

void changeFriends(String uname, boolean b) 
     { // change a friend's "online" status 

    Arrays.sort(names); 
    int index = Arrays.binarySearch(names, uname); 

    System.out.println("NAME OF ONLINE USER IS AT INDEX:" + index + "Name:" + uname); 
     if(index > -1) 
     { 

      if(b == true) 
      { 
       loggedOn[index] = true; 
      } 
      else 
      { 
       loggedOn[index] = false; 
      } 
     } 
     // call method to update buttons 
     changeNameButtons(); 
    } 
+1

我測試你的代碼,它返回'在線用戶的用戶名是指數:3名:Free' – bhuang3

回答

6

嗯,我只是跑你的代碼,我得到了指數3

Arrays.sort(names); 
int index = Arrays.binarySearch(names, "Free"); 
System.out.println(index); 

你可能正在尋找freeFree(後面有個空格),而不是Free,在這種情況下,返回-5。

+0

@ MadProgrammer哈哈,我是不是粗魯,總之chhanged吧:) – PermGenError

+0

我沒想到你在哪裏,但不是每個人都會這樣認爲;) – MadProgrammer

+0

@MadProgrammer我看到任何的編輯沒有「苛刻」的評論。你在說什麼? – EJP

9

如果它返回它沒有找到一個負值:

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html

公共靜態INT的binarySearch(Object []對象一,
對象鍵)

返回:指數如果搜索關鍵字包含在數組中,否則,( - (插入點)-1)。如果所有元素 陣列中小於指定鍵的第一元件比所述鍵時,或則爲a.length的索引 :插入點被定義爲在 該密鑰將被插入到該陣列的點。請注意,這 保證返回的值將> = 0,當且僅當鍵 被發現。

無論你通過爲uname是不是"Free"。我高度懷疑你想不區分大小寫(或有尾隨字符;空格或換行);)