Бинарный поиск метода объекта ArrayList для извлечения строки не будет определять, идентичны ли строки? - PullRequest
1 голос
/ 17 марта 2012

Программа полностью сортирует ArrayList из Student объектов по целым числам наибольшее среднее значение, фамилию, а также имеет возможность выполнить поиск. Моя программа работает безупречно, за исключением моего бинарного поиска, по которому я абсолютно не могу определить причину сбоя. Я распечатал всю информацию, как она появляется.

Вот класс ученика с методом, который ссылается на имя и фамилию ученика (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));
            }
    }

}

1 Ответ

4 голосов
/ 17 марта 2012

В Java вам нужно использовать .equals() для сравнения строк.Например, вместо этого:

if (term == fName){

вам нужно сделать это:

if (term.equals(fName)){

В противном случае вы сравниваете только ссылки.

Кстати, это не двоичный файлпоиск, это линейный поиск.Вы можете увидеть одну реализацию бинарного поиска, например, здесь:

, хотя для сравнения строк вы должны использовать .compareTo / * 1019Методы * .compareToIgnoreCase в классе String вместо операторов < / >.

...