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

返回第一个可用日期的Java方法,java,date,search,Java,Date,Search,我对即将提交的一个项目有问题(这是为了考试) 这是一个由多种方法组成的程序,但我需要一些帮助: 我需要生成今天的日期-我被迫使用日期和日历,即使日期不推荐使用,这也是这次考试的必修课-然后检查我的向量中是否已经存在该日期的预订 如果今天已经存在预订,则该方法必须告诉我第一个可用日期 i、 e:今天是2019年4月12日,我没有今天的预订,节目告诉我2019年4月12日是第一个可用的日期 如果没有,它将检查明天是否有预订。如果2019年4月13日不在我的矢量中,它将返回我2019年4月13日是第一

我对即将提交的一个项目有问题(这是为了考试)

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

我需要生成今天的日期-我被迫使用日期和日历,即使日期不推荐使用,这也是这次考试的必修课-然后检查我的向量中是否已经存在该日期的预订

如果今天已经存在预订,则该方法必须告诉我第一个可用日期

i、 e:今天是2019年4月12日,我没有今天的预订,节目告诉我2019年4月12日是第一个可用的日期

如果没有,它将检查明天是否有预订。如果2019年4月13日不在我的矢量中,它将返回我2019年4月13日是第一个可用日期

该程序包括添加和删除预订

有了这段代码,一切都正常(我也尝试添加了do while和嵌套for循环,但没有任何变化),但并不总是这样:在第一次编译时,我有一个dateAvailable的空白字段

你能帮我吗

    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.");
        }

    }
private void firstAVdate(){
日期数据=新日期();
字符串数据传输;
布尔图塔克;
SimpleDataFormat格式化程序=新的SimpleDataFormat(“dd/MM/yyyy”);
dataStr=formatter.format(数据);
字符串dateAvailable=dataStr;
System.out.println(“当前日期:”);
System.out.println(dataStr);
Calendar c=Calendar.getInstance();
如果(向量大小()>0){

对于(int i=0;i我假设您的意思是向量包含所有预定日期。 (你的代码正好相反)

所以我会使用一个哈希表结构来记录预定的日期

把它想象成一个日期池;如果你想预订一个日期,你首先要检查他是否在哈希表中,如果不在,你就把它“扔”进去

因此,这是一个抽象代码(仅在逻辑上编写,不可复制!):


你需要一个双循环。对于你想要检查的每个日期,你需要对照向量中的每个条目检查它,直到有一个匹配为止

如果您编写一个辅助方法
isDateBooked
来确定向量是否已经包含给定日期的预订,则可能会更容易管理。此方法将包含一个循环,该循环在向量的元素上迭代,直到日期匹配。然后您从iter的循环中调用
isDateBooked
超过日期的ates,直到
isDateBooked
返回false

java.time
我知道你是不被允许的,但是对于其他阅读的人来说:不要使用
SimpleDateFormat
Date
Calendar
。这些类设计得很糟糕,而且已经过时很久了。使用
LocalDate
from。还有
BookingSystem.getDataString()
不应该返回字符串,而应该返回一个
LocalDate
(当然应该相应地命名)。以这种方式使用java.time会使您的工作更容易,并给出更清晰的代码。

这是哪个
vect
。要测试两个日期对象的相等性,请使用
date1.compareTo(date2)==0
其中
date1
date2
是日期对象。
vect
是一个向量:
private vector vect=new vector()
请发布
预订系统
代码。如果可以的话,我会的,这是为了考试,我想我的教授也在我们当中。我能以任何方式将它发送到pm中吗?顺便说一句,我的程序的其他部分没有任何问题。涉及向量的操作非常有效。这个方法对整个程序有单独的作用(在开关盒内调用,带有一个输入字母)my vector动态填充预订,其内容可以保存在文件(dat或txt)中。代码中的第一个if仅用于检查向量是否为空。我本来会使用哈希表,但很遗憾,我不允许使用。好的。我再次检查了您的代码,但仍然不清楚您要做什么,但我建议您在内部if语句的末尾添加一个break语句。为什么打印“No bookings available”(无预订可用)如果向量是空的?不是相反吗?因为如果我的向量是空的(里面没有数据),我必须打印“没有可用的预订”。忽略这一点。
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);
}