返回第一个日期可用的Java方法

时间:2019-04-12 16:03:09

标签: java date search

我对一个项目有问题,我准备很快提交(这是为了考试)。

这是一个由多种方法组成的程序,但在这一点上我需要一些帮助:

我需要生成今天的日期-我必须使用日期和日历,即使不赞成使用日期,这也是此项考试的强制性要求-然后检查我的向量中是否已存在该日期的预订。< / 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.");
        }

    }

2 个答案:

答案 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。

java.time

我知道你是不允许的,但对于其他所有人,请读:不要使用SimpleDateFormatDateCalendar。这些课程设计欠佳,而且已经过时。使用java.time, the modern Java date and time API中的LocalDate。同样,BookingSystem.getDataString()不应返回字符串,而应返回LocalDate(当然应该相应地命名)。以这种方式使用java.time可以使您的工作容易得多,并且代码更清晰。