当前位置: 首页 > 知识库问答 >
问题:

Calendar类获取了错误的输出DayOfYear输出,就像以前一样

沈健
2023-03-14

我有以下问题。我(完全菜鸟)想在不使用日历库的情况下获得一年中的一天来完成我的大学任务。

所以我在这里写我的代码,就像我认为它应该是这样的,但不知怎么的,我的结果得到了不同的结果,就像他们应该做的那样,我真的不知道为什么。我的代码很简单,我想也许你们中的一个人可以看到我的问题。现在已经过去了1-2个小时,时间对我来说已经不多了。

在我的程序的主要方法中,你可以清楚地看到我记录的内容,我希望有人能看到问题所在

ublic class Date{
int day;
int year;
int month;

public Date(int year, int month, int day){
    this.year = year;
    this.month = month;
    this.day = day;
    if((year >= 1000) & (year <= 9999) && (month <= 12) && (month >= 1) && (day <= 31) && (day >= 1)){
    }else{System.out.println("ERROR: Illegal date");}
}

public int getDay(){
    return day;
}

public int getMonth(){
    return month;
}

public int getYear(){
    return year;
}

public static int getDaysInMonth(int year, int month){
    int daysinMonth;
    boolean schaltjahr =(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

    if(month == 4 || month == 6 || month == 9 || month == 11){
        daysinMonth = 30;}
    else if (month == 2 && schaltjahr){
        daysinMonth=29;}
    else if (month==2){
        daysinMonth=28;}
    else{
            daysinMonth = 31;
        }
    return daysinMonth;
    }
    
public static boolean validate(int year, int month, int day){
    if((year >= 1000) & (year <= 9999) && (month <= 12) && (month >= 1) && (day <= 31) && (day <= 1)){
        return true;
    }else{
        return false;
    }
}
public int dayOfYear(){
    int x = 0;
    for (int y = 1; y < month; y++) {
        x += getDaysInMonth(month, year);
    }
    x += day;
    return x;
}

public int sameYearDiff(Date other){

    if(year==other.year){

            if(other.day<=day){
                return (other.day-day);
            }
            else{
                return Integer.parseInt("-" + (day-other.day));
            }
    }else{ return 0;}} 

public String toString(){
    return month + " " + day + ", " + year;
}
public static void main(String[]args){
    Date d  = new Date (2019,3,20);
    System.out.print(d.dayOfYear()); //Expected output 140
    // Testing every 20th Day of each month of the year 2019
    // Januar is right with 20
    // Februar is right with 51
    // March expected output 79 we got 82 | +3
    // April expected output 110 we got 110 | + 3
    // May expected output 140 we got 144 | +4
    // Juni expected output 171 we got 175 | +4
    // Juli expected output 201 we got 206 | +5
    // August expected output 232 we got 237 | + 5
    // September expected output 263 we got 268 | +5
    // October expected output 293 we got 299 | +6
    // November expected output is 324 we got 330 | +6
    // December expected output is 354 we got 361


}

}

共有1个答案

蒲功
2023-03-14
System.out.print(d.dayOfYear()); //Expected output 140

140? 检查你的数学。第三个月的第20天是第79天。

1月31日,12月28日,3月20日。31 28 20 = 79.

你得到的。

x=getDaysInMonth(月,年)

您已经切换了月份年份。因此,您的月份校验码处理的是第2019个月,这自然会导致其他{dayin详月=31;}块触发:您的所有月份现在都是31天。这解释了3(据报道,febroari有31天,而不是正确的28天)。

StackOverflow不是一个调试工具。幸运的是,调试通常相当容易!

要点很简单。你浏览每一行代码,在你的脑海中找出你期望发生的事情(这个变量应该得到那个值,这个应该被打印出来,诸如此类)。然后运行代码,比较实际发生的事情和您认为应该发生的事情。2号偏离的那一刻,瞧!你发现了一只虫子。继续看;通常会有更多。

可以使用调试器来执行此操作。或者只是添加一堆println语句。你很快就会明白的。

下次再做吧。

 类似资料:
  • 我试图根据用户使用calandar类输入的日期来确定一天是否是周末。但是当我打印出当天的值时,我得到了不正确的输出。 这是我的代码: 但是输出

  • 问题内容: 我正在建立一个带有react和webpack的网站。当我使用webpack构建应用程序并尝试包含图像时,图像与其他资产一起写入了build文件夹,但是webpack输出的图像链接不正确。我可以进入构建文件夹并查看图像,因此正确复制了该图像,这是链接错误。 我的react组件看起来像这样: 我的Webpack配置如下所示: 从昨天开始,我就一直把头撞在墙上,因此,我们将不胜感激。让我知道

  • 我正在尝试制作一个程序,让很多人进入ArrayList,然后从中随机选择一个名字。代码运行正常,但请求名称输入的字符串在第一次运行时会显示两次。知道为什么会这样吗? 我希望它显示的内容:输入名称:。。。。。。 显示内容:输入名称:输入名称:。。。。。。

  • 问题内容: 您认为获得线程工作结果的最佳方法是什么?想象一个执行一些计算的线程,您如何警告主程序计算完成? 您可以每隔X毫秒轮询某个称为“作业完成”的公共变量或其他方式,但是随后您将在结果可用时才收到结果……主代码将浪费时间等待它们。另一方面,如果使用较低的X,则轮询将浪费CPU太多次。 因此,您如何做才能知道线程或某些线程已经完成了工作? 抱歉,如果它看起来与此其他问题相似,我想这可能是 ebe

  • 我还在想方设法搞定PDO。 我有一个用PDO执行的insert语句。插入工作很好,但如果有一个错误,我希望它显示给用户。 我有下面的try catch块。 如果查询失败,或者假设有一个重复的IDNumber,我希望将此显示给用户。 如果我只是尝试回显变量$exception,它是不起作用的。 我想把mysql错误返回给用户。 我一如既往地感谢任何建议。 谢谢,瑞恩 更新 根据建议的答案编写新代码:

  • 问题:基于PersonDto中存在的规则值,我正在应用这些规则。在Rule1类中,我有一个修改id字段的逻辑。我正在设置新的id,我得到作为参数。 最后,我将结果存储到ArrayList中。 但是在ArrayList中,所有PersonDto的值都是我在应用规则时传递的最后一个id值。 例如: 正如您在上面的代码片段中所看到的,有两个ID10001和10002,但是当存储并打印结果时,所有元素中的