Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我的测试课不运行吗?_Java - Fatal编程技术网

Java 为什么可以';我的测试课不运行吗?

Java 为什么可以';我的测试课不运行吗?,java,Java,所以我试着做一个测试课,说明是 创建一个名为TestDate的类,其构造函数通过调用每个日期的getDayOfWeek()方法创建15个日期对象并显示日期的星期几。具体日期如下所示,顺序如下: 但是当我运行它的时候,我总是会出错!我想是我的构造器崩溃了或者是在这条线上的某个地方 下面是我的TestDate类代码 public class TestDate { private Date date; /* * Main Constructor * @param fifteen specific

所以我试着做一个测试课,说明是

创建一个名为TestDate的类,其构造函数通过调用每个日期的getDayOfWeek()方法创建15个日期对象并显示日期的星期几。具体日期如下所示,顺序如下:

但是当我运行它的时候,我总是会出错!我想是我的构造器崩溃了或者是在这条线上的某个地方

下面是我的TestDate类代码

public class TestDate
{
private Date date;
/*
 * Main Constructor
 * @param fifteen specific date, test to your heart's content
 */
public TestDate()
{
    Date d1 = new Date(1970, 11, 15); 
    System.out.println(date.getDayOfTheWeek());
    Date d2 = new Date(1887, 7, 31);         
    Date d3 = new Date(1966, 5, 2);          
    Date d4 = new Date(1980, 8, 19);         
    Date d5 = new Date(2001, 9, 11);         
    Date d6 = new Date(1900, 6, 26);         
    Date d7 = new Date(1940, 2, 28);        
    Date d8 = new Date(1974, 10, 30);       
    Date d9 = new Date(1914, 1, 15);        
    Date d10 = new Date(1840, 10, 1);        
    Date d11 = new Date(1999, 12, 31);       
    Date d12 = new Date(1988, 5, 20);       
    Date d13= new Date(2012, 3, 10);         
    Date d14 = new Date(2006, 4, 1);        
    Date d15 = new Date(1992, 2, 29);       


}
}
这是我的Date类构造函数和方法GetDayOfWeek,我想这就是所有与我的问题相关的信息

public class Date
{
public Date(int year, int month, int day)
{
    setYear(year);
    setMonth(month);
    setDay(day);
}   

public String getDayOfTheWeek()   
{
    int step0 = year%100;
    int step1 = step0 / 12;
    int step2 = step0 % 12;
    int step3 = step2 / 4;
    int step4 = day;    
    int step5 = 0;            
    if(month == JANUARY || month == OCTOBER)
    {
        step5 = JAN_CODE;
    }
    else if(month == FEBURARY || month == MARCH || month == NOVEMBER)
    {
        step5 = FEB_CODE;
    }
    else if(month == APRIL || month == JULY)
    {
        step5 = APR_CODE;
    }
    else if(month == MAY)
    {
        step5 = MAY_CODE;
    }
    else if(month == JUNE)
    {
        step5 = JUN_CODE;
    }
    else if(month == AUGUST)
    {
        step5 = AUG_CODE;
    }
    else if(month == SEPTEMBER || month == DECEMBER)
    {
        step5 = SEP_CODE;
    }
    else
    {
        step5 = 0;
    }  
    if(year/100 ==16 || year/100 == 20)
    {
        step5 = step5 + SPECIAL_CODE_SIX;
    }
    else if(year/100 == 17 || year/100 == 21)
    {
        step5 = step5 + SPECIAL_CODE_FOUR;
    }
    else if(year/100 == 18)
    {
        step5 = step5 + SPECIAL_CODE_TWO;
    }
    int step6 = (step1 + step2 + step3 +step4 + step5)%MOD_CODE;     
    if(step6 == SAT_CODE)
    {
        return "Saturday";
    }
    else if(step6 == SUN_CODE)
    {
        return "Sunday";
    }
    else if(step6 == MON_CODE)
    {
        return "Monday";
    }
    else if(step6 == TUE_CODE)
    {
        return "Tuesday";
    }
    else if(step6 == WED_CODE)
    {
        return "Wednesday";
    }
    else if(step6 == THU_CODE)
    {
        return "Thursday";
    }
    else if(step6 == FRI_CODE)
    {
        return "Friday";
    }
    else
    {
        return null;
    }
} 
}  
我在mutator方法中传递了参数

public void setYear(int year)
    {
    if(year <= CURRENT_YEAR && year >= YEAR_ZERO)
    {
        this.year = year;
    }        
}

    public void setMonth(int month)
{
    if(month <= DECEMBER && month >= JANUARY)
    {
        this.month = month;
    }
}

    public void setDay(int day)
{
    if(month == JANUARY || month == MARCH || month == MAY || month == JULY || month == AUGUST
    || month == OCTOBER || month == DECEMBER)
    {
        if(day <= DAY_THIRTY_ONE && day >= DAY_ONE)
        {
            this.day = day;
        }
        else 
        {
            year = CURRENT_YEAR;
            month = JANUARY;
            day = DAY_ONE;
        }
    }    
    else if(month == APRIL || month == JUNE || month == SEPTEMBER || month == NOVEMBER)
    {
        if(day <= DAY_THIRTY && day >= DAY_ONE)
        {
            this.day = day;
        }
        else
        {
            year = CURRENT_YEAR;
            month = JANUARY;
            day = DAY_ONE;
        }
    }
    else if(month == FEBURARY)
    {
        if((isLeapYear() == true) && day <= DAY_FEB_LEAP && day >= DAY_ONE)
        {
            this.day = day;
        }      
        else if((isLeapYear() == false) && day <= DAY_FEB_NORMAL && day >= DAY_ONE)
        {
            this.day = day;
        }  
        else 
        {
            year = CURRENT_YEAR;
            month = JANUARY;
            day = DAY_ONE;
        }
    }        
}
Sorry for the long list of code, I don't really know which ones are useless.
public void setYear(整数年)
{
如果(年份=零年)
{
今年=年;
}        
}
公共无效设置月(整数月)
{
如果(月=一月)
{
本月=月;
}
}
公共无效设定日(整数日)
{
如果(月==一月| |月==三月| |月==五月| |月==七月| |月==八月
||月份==10月|月份==12月)
{
如果(天=第一天)
{
this.day=天;
}
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}    
如果(月==四月| |月==六月| |月==九月| |月==十一月)
{
如果(天=第一天)
{
this.day=天;
}
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}
如果发生其他情况(月==二月)
{
如果((isLeapYear()==true)&&day=第一天)
{
this.day=天;
}      
else if((isLeapYear()==false)和&day=第一天)
{
this.day=天;
}  
其他的
{
年份=本年度;
月份=一月;
天=第一天;
}
}        
}
很抱歉列出了这么长的代码,我真的不知道哪些是无用的。

在您调用的构造函数的第二行

System.out.println(date.getDayOfWeek())

变量
date
,此时为空,因为它尚未初始化。这会导致出现
NullPointerException
。请阅读此处了解更多信息:

我(假设)你想在那里做的是:

System.out.println(d1.getDayOfWeek())


除此之外,我还注意到:

  • 在javadoc注释中使用
    @param
    字段,而不使用参数。不要这样做。如果构造函数不接受参数,则不应存在
    @param

  • 您正在构造函数中创建15个Date实例,其作用域在构造函数完成后立即结束。你可以删除它们,什么都不会改变。我假设您希望这个类成为一个“测试”,以测试您的日期是否正确初始化。我建议使用
    main
    方法(用于编码时的快速测试)和像
    JUnit
    这样的实际测试框架进行“真实”测试。若你们感兴趣,你们可以阅读本教程。它还详细说明了您实际想要测试的原因


  • 如果出现错误,请共享stacktraceWell,是您的构造函数崩溃了吗?您的堆栈跟踪将告诉您问题的确切位置:类、方法和行号,以及异常的实际类型。我将继续学习什么是堆栈跟踪,谢谢!这正是我想要的,我将阅读链接了解更多信息。@james没问题。我更新了我的答案,加入了一些你目前没有使用的“最佳实践”。也许你也可以看看。