【问题标题】:Binary search of an ArrayList object method to retrieve a string will not identify if strings are identical?ArrayList 对象方法的二进制搜索以检索字符串将无法识别字符串是否相同?
【发布时间】:2012-09-15 03:13:56
【问题描述】:

整个程序按整数最高平均值、姓氏对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));
            }
    }

}

【问题讨论】:

    标签: string collections arraylist binary-search


    【解决方案1】:

    在Java中,你需要使用.equals()来比较字符串。例如。而不是这个:

    if (term == fName){
    

    你需要这样做:

    if (term.equals(fName)){
    

    否则,您只是在比较参考文献。

    顺便说一句,这不是二分搜索,而是线性搜索。您可以看到二进制搜索的一种实现,例如这里:

    虽然要比较字符串,但您将在 String 类上使用 .compareTo / .compareToIgnoreCase 方法而不是 &lt; / &gt; 运算符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2020-09-27
      • 1970-01-01
      • 2015-10-17
      • 2023-03-24
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多