我对一个项目有问题,我准备很快提交(这是为了考试)。
这是一个由多种方法组成的程序,但在这一点上我需要一些帮助:
我需要生成今天的日期-我必须使用日期和日历,即使不赞成使用日期,这也是此项考试的强制性要求-然后检查我的向量中是否已存在该日期的预订。< / p>
如果今天已经有预订,该方法必须告诉我第一个可用日期。
即:今天是12/04/2019,今天我没有任何预订,程序告诉我12/4/2019是第一个可用日期。
如果没有,它将检查明天是否有预订。如果不在我的向量中13/04/2019,它将使我返回13/04/2019是第一个可用日期。
该程序包括添加和删除预订。
使用此代码,一切正常(我也尝试添加do-while和嵌套的for循环,但没有任何变化),但并非总是如此:在第一次编译时,即,我有一个dateAvailable的空白字段。 / p>
你能帮我吗?
private void firstAVdate() {
Date data = new Date();
String dataStr;
boolean tuttoOK;
SimpleDateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy");
dataStr=formatter.format(data);
String dateAvailable=dataStr;
System.out.println("Current date : ");
System.out.println(dataStr);
Calendar c = Calendar.getInstance();
if (vect.size()>0) {
for (int i=0; i<vect.size(); i++) {
if (vect.get(i).getDataString().equals(dataStr)) {
c.add(Calendar.DAY_OF_MONTH, 1);
dataStr = formatter.format(c.getTime());
dateAvailable=dataStr;
}
}
System.out.println("");
System.out.println("First available date:");
System.out.println(dateAvailable);
}else {
System.out.println("No bookings available.");
}
}
答案 0 :(得分:1)
我假设您的意思是向量包含所有预订的日期。 (您的代码则相反)。
所以我将使用哈希表结构来预订日期。
将其视为日期池;如果要预订日期,请先检查哈希表中是否存在该日期,否则请“将其放入”。
这是一个抽象代码(仅按逻辑编写,请勿复制!):
initially:
HashTable ht = new HashTable;
book_a_date(String date):
if(!ht.contains(date)) {
ht.add(date);
return date + " successfully booked!";
}
else {
date = next day;
return book_a_date(date);
}
unbook_a_date(String date):
if(ht.contains(date) {
ht.remove(date);
}
答案 1 :(得分:0)
您需要一个双循环。对于您要检查的每个日期,都需要根据向量中的每个条目对其进行检查,直到匹配为止。
如果编写辅助方法isDateBooked
来确定引导程序是否已包含给定日期的预订,则可能更易于管理。此方法将包含一个循环,该循环在向量的元素上进行迭代,直到日期匹配为止。然后,您可以在循环访问日期的循环中调用isDateBooked
,直到isDateBooked
返回false。
我知道你是不允许的,但对于其他所有人,请读:不要使用SimpleDateFormat
,Date
和Calendar
。这些课程设计欠佳,而且已经过时。使用java.time, the modern Java date and time API中的LocalDate
。同样,BookingSystem.getDataString()
不应返回字符串,而应返回LocalDate
(当然应该相应地命名)。以这种方式使用java.time可以使您的工作容易得多,并且代码更清晰。