0

我正在编写一个有 3 个类的程序。该程序将读入一个列出您拥有的约会的文件并将它们读入 schedule[]。将它们读入日程表后,您需要对它们进行排序。您还必须能够添加其他约会并且还能够搜索约会。输入文件的第一行如下所示:

11/10/2013 14:00 讨论学生编程逻辑

其中 11/10/2013 是一个名为 date 的字符串,14:00 是一个名为 time 的字符串,剩下的句子是一个名为 text 的字符串。我已将这些全部作为字符串、字符串、字符串读入我的数组时间表

我的老师在 Appointment 类中创建了一个 compareTo 语句,它连接了日期和时间,因为搜索和排序需要对这两个组合进行,我们从来没有做过一个有两个变量的 compareTo。

这是 Appointment() 中的 compareTo,如下所示:

public int compareTo(Appointment other)
{
    String one, two;
    one = this.date + this.time;
    two = other.date + other.time;
    return one.compareTo(two);
} // end compareTo

在 Schedule 类中,我必须调用一个类“find”,要求用户输入日期和时间,然后调用我的日程表的二分搜索()来查看是否有匹配项,并且我有一个约会日期和time 然后返回 find(),输出没有 apt 或 appt 的详细信息。我以前做过这个,但是当我只搜索一件事时,比如日期......我的代码是为了搜索日期而编写的,因为我只是不知道如何让它使用 compareTo 并一起搜索两者(日期+时间)我不得不交出一些东西……现在我只想知道什么是正确的方法!!。我试过用“一”和“二”代替日期,各种不同的东西……但很沮丧。没有任何效果。有人可以告诉我这应该如何写在搜索中。我有两个问题:1。我只搜索日期而不是日期+时间。2. 在二进制搜索中的 compareTo 中,我收到错误消息“类型字符串中的方法 compareTo 字符串不适用于参数约会。”

这是调用我的二进制搜索方法的 find 方法:

private void find()
{
    String inDate, inTime;
    int position;
    Appointment searchArg = new Appointment();

    // get info from user

    System.out.println ("Enter Date and Time separated by space: ");
    inDate = console.next();
    inTime = console.next();

    position = binarySearch(schedule, numAppointments, searchArg);
    //should that last thing be "searchArg"? or "date"? or what??
    if (position == -1)
        System.out.println(" appointment does not exist");
    else
        System.out.println("\nAppointment =");
    outputOneAppointment(position+1);       
}

private int binarySearch(Appointment[] list, int listLength, Appointment searchItem)
{
    int first = 0;
    int last = listLength - 1;
    int mid = 0;

    boolean found = false;

    while (first <= last && !found)
    {
        mid = (first + last) / 2;

        if (list[mid].date.equals(searchItem))
            found = true;  //I should not search date but rather the date and time together
        else if (list[mid].date.compareTo(searchItem) > 0)  
            //I also get that error here saying what I wrote above in my question                                   
            last = mid - 1;
        else
            first = mid + 1;
    }
    if (!found)
        mid = -1; //it is an unsuccessful search

    return mid;
}//end binarySearch
4

1 回答 1

0

您正在将日期(您未提供任何信息)与Appointment

list[mid].date.compareTo(searchItem)

相反,您应该比较相同类型的对象,大概是:

list[mid].date.compareTo(searchItem.date)

但是,这有点hacky,不应该真的这样做。相反,实现一个Comparator比较Appointment对象的:

final class AppointmentDateComparator implements Comparator<Appointment> {

    @Override
    public int compare (Appointment a1, Appointment a2) {
        // Implement your comparison logic here...
    }
}

您也可以 make Appointmentimplement Comparable,但日期比较似乎不是正确的自然顺序。

另请注意,JavaArrays.binarySearch已经提供了执行二进制搜索的功能。

于 2013-11-13T18:02:53.737 回答