2013-11-28 74 views
0

在我的程序中,我將20個名稱從一個文件存儲到一個數組中。用戶然後可以輸入一個名稱,並使用二進制搜索來查找該位置。我的程序似乎無法將目標與陣列中點匹配。我試過修剪任何空白區域,但仍然沒有運氣。 搜索算法看起來好嗎?在二進制搜索字符串數組時遇到問題

while(true){ 
      System.out.println("Enter the name you are searching for."); 
      String target = sc.nextLine(); 
      if(target.equals("done")) 
       break; 
      int mid; 
      int left = 0; 
      int right = names.length-1; 
      while(left <= right){ 
       mid = (left + right)/2; 
       if(target.equals(names[mid].trim())){ 
        System.out.println("Found in position: " + mid); //when found 
        break; 
       } 
       else if(target.compareTo(names[mid]) < 0){  //set right parameter 
        right = mid-1; 
       } 
       else if(target.compareTo(names[mid]) > 0){  //set left parameter 
        left = mid+1;  
       }   
      } 
     } 
+0

也許這是一個愚蠢的問題,但'名稱'按升序排序吧?算法看起來不錯。 – alfasin

+0

Try:'String target = sc.nextLine()。trim();' – alfasin

回答

1

也許你應該修剪目標?

if(target.trim().equals(names[mid].trim())){ 
       System.out.println("Found in position: " + mid); //when found 
       break; 
      } 
0

確保陣列names分類,因爲二進制搜索僅在有序陣列工作。

算法沒問題。