2012-03-17 3 views
1

프로그램 전체가 ArrayListStudent의 개체를 가장 높은 평균 성으로 정렬하고 검색을 수행 할 수있는 옵션도 있습니다. 내 프로그램은 오류의 원인을 절대 결정할 수없는 바이너리 검색을 제외하고는 완벽하게 작동합니다. 내가 올 때 모든 정보를 인쇄했습니다.문자열을 검색하는 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

자바에서는 .equals()을 사용하여 문자열을 비교해야합니다. 예 : 이 대신에 :

if (term == fName){ 

이 작업을 수행해야합니다

if (term.equals(fName)){ 

그렇지 않으면, 당신은 비교하고 참조 만.

Btw, 이것은 2 진 검색이 아니며 선형 검색입니다. 예를 들어 바이너리 검색의 한 구현을 볼 수 있습니다. 여기 : 문자열을 비교하지만

당신은 String 클래스에 .compareTo/.compareToIgnoreCase 방법 대신 </> 연산자를 사용합니다.

+0

아, 훌륭함. 고마워요! – pearbear

+0

물론 도움이 되니 기쁩니다! –

관련 문제