我正在编写一个包含3个班级的程序。该程序将读入一个列出您的约会的文件,并将其读入schedule []。将它们读入计划后,您需要对它们进行排序。您还必须能够添加其他约会,并且还能够搜索约会。输入文件的第一行如下所示:
11/10/2013 14:00讨论学生编程逻辑
其中11/10/2013是一个名为date的字符串,14:00是一个名为time的字符串,其余的句子是一个名为text的字符串。我已将这些全部读入我的数组计划中,如string,string,string
我的老师在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”,要求用户输入日期和时间,然后调用我的日程表的二进制搜索()来查看是否有匹配并且我有一个约会那个日期和时间然后回到find(),输出没有apt或appt的细节。我以前做过这个,但是当我只搜索一件事时,比如日期...我的代码写的是日期搜索,因为我无法弄清楚如何使用compareTo并一起搜索两者(日期+时间)我不得不交一些东西......现在我只想知道正确的方法!!我试过把“一”和“两个”代替日期,各种不同的东西......但是很沮丧。什么都行不通。有人可以告诉我应该如何写在搜索中。我有两个问题:1。我只搜索日期而不是日期+时间。 2.在我的compareTo中,在二进制搜索中,我得到错误,“类型字符串中的方法compareTo字符串不适用于参数Appointment。”
这是我的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
答案 0 :(得分:0)
您正在将日期(您未提供任何信息)与Appointment
list[mid].date.compareTo(searchItem)
相反,你应该比较相同类型的对象,大概是:
list[mid].date.compareTo(searchItem.date)
但是,这有点 hacky ,不应该那样做。而是implement a Comparator
比较Appointment
个对象:
final class AppointmentDateComparator implements Comparator<Appointment> {
@Override
public int compare (Appointment a1, Appointment a2) {
// Implement your comparison logic here...
}
}
您还可以Appointment
实施Comparable
,但似乎日期比较不是正确的自然顺序。
另请注意,Java已经提供Arrays.binarySearch
来执行二进制搜索。