2012-03-17 38 views
1

該程序完整地對Student對象的ArrayList進行排序,整數最高的是平均值,姓氏,並且還可以選擇執行搜索。我的程序工作完美,除了我的二進制搜索,我絕對不能確定失敗的原因。隨着它的出現,我已經打印了所有的信息。檢索字符串的ArrayList對象方法的二進制搜索不會識別字符串是否相同?

下面是學生班的方法,引用學生的姓和名(String)。

public String getFirstName(){ 
     return firstname; 
    } 

    public String getLastName(){ 
     return lastname; 
    } 

此外,這裏是二進制搜索的代碼。是的,我知道Collections有一個確切目的的方法,但對於我的班級,我需要自己編寫搜索。

private static void searchStudent(ArrayList<Student> a){ 
    Scanner reader = new Scanner(System.in); 
    System.out.print("Please enter search term: "); 
      String term = reader.next(); 

    //System.out.println(term + " " + term.length()); 
    System.out.println("---SEARCH RESULTS:---"); 
    for (int i = 0; i < a.size(); i++){ 
     String fName = (a.get(i).getFirstName()); 
     String lName = (a.get(i).getLastName()); 
     //System.out.println(fName + " " + fName.length()); 
     //System.out.println(lName + " " + lName.length()); 
      if (term == fName){ 
       System.out.println(a.get(i)); 
      } else if (term == lName){ 
       System.out.println(a.get(i)); 
      } 
    } 

} 

回答

4

在Java中,您需要使用.equals()來比較字符串。例如。而不是這樣的:

if (term == fName){ 

你需要這樣做:只有

if (term.equals(fName)){ 

否則,你是比較引用。

順便說一句,這不是一個二進制搜索,它是一個線性搜索。您可以看到二進制搜索的一個實現,例如在這裏:

雖然比較字符串你可以使用String類.compareTo/.compareToIgnoreCase方法,而不是</>運營商。

+0

啊,非常好。非常感謝你! – pearbear 2012-03-17 17:04:24

+0

當然,很樂意幫忙! – 2012-03-17 17:05:47