有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Int输入和布尔输出测试日期是否有效的测试类,以及如何测试(java)

我有一个类的赋值,在这个类中,我必须创建一个类(称为FunWithCalendars),该类接受3个int值(月、日和年),并使用1个布尔方法(isValid)检查总日期是否有效,该方法使用3个其他辅助方法(isLeapYear、isValidMonth、isValidDay)来确定给定的日期和月份是否有效。现在我想在Eclipse中测试我的文件。 到目前为止,我已经学会了用这段代码测试类/方法(我是个新手,所以这是我知道的唯一方法):

public class driverFunWithCalendars {
    public static void main(String [] args ) {
        FunWithCalendars test = new FunWithCalendars () ;
        System.out.println( test.FunWithCalendars () );

然而,当我必须输入未在方法中定义的int值时,我不理解如何测试布尔方法的true或false。上面代码中的错误位于“newfunWithCalendars();”和“(test.funwithcalendars());”。 以下是我的主要代码:

public class FunWithCalendars
{
    private int month, day, year;
    
    public FunWithCalendars( int m, int d, int y )
    {
        month = m;
        day = d;
        year = y;
    }
    
     public boolean isValid ( boolean isValidMonth, boolean isValidDay ) 
     { 
         if ( isValidMonth && isValidDay ) 
         {
             return true;
         }
         else 
         {
             return false;
         }
        
     }
                 
          
    
     public boolean isLeapYear (int year) 
     {
        
        if ( (year / 400) == 0 )  
        {
            return true;
        }
        else if ( ((year / 4) == 0) && ((year/100) !=0))
        {
            return true;
        }
        else 
        {
            return false;
        }
     }
    
     public boolean isValidMonth ( int month )  
     {
        if ( month >= 1 && month <= 12 ) 
        {
            return true;
        }
        else 
        {
            return false;
        }
     }
    
     public boolean isValidDay  ( int month, int day, int year, boolean isLeapYear ) 
     {
         if ( (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && ((day<=31) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 4 || month == 6 || month == 9 || month == 11) && ((day<=30) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 2) && ( isLeapYear = true) && ((day<=29) && (day>=1)) ) 
         {
             return true;
         }
         else if ( (month == 2) && ( isLeapYear = false) && ((day<=28) && (day>=1)) ) 
         {
             return true;
         }
         else 
         {
             return false;
         }
     }
     
}
     

}
}

基本上,我只想知道如何使用3个int值(日期、月、日、年)测试代码,以查看日期是否有效,是否使用isValid方法。如果我的问题不清楚,或者我解释的作业让人困惑,我真的很抱歉,但正如我所说,我是Java和Stackoverflow问题的新手,我还没有理解Java,我可以提出更高效、更简洁的问题,但我真的希望你们中的一些人能帮助我。我还将附上我的原始作业的翻译稿,如果你想帮助我的话,这可能会让你不那么困惑,也会对你有所帮助:

/* 我们今天使用的日历是公历,由意大利天文学家阿洛伊修斯·利利乌斯设计,教宗格雷戈里十三世于1582年2月24日颁布。在公历中,一年的平均长度正好是365.2425天。我们可以通过一些相当复杂的“闰年”规则来实现这一点:

如果一年可以被4整除,那它就是闰年…除非它可以被100整除,在这种情况下它不是闰年…除非它可以被400整除,在这种情况下它是闰年

好吧,这让人困惑。让我们再试一次:

一年是闰年,如果:

它可以被400整除

它可以被4整除,但不能被100整除

根据这些规则,1512年、1600年和2000年是闰年。1514年、1700年和1900年不是

(你认为闰年只是四年一次!朱利叶斯·凯撒的历法就是这样,这是错误的,因为每四年加上366天,我们的年平均长度为365.25天,而不是更精确的365.2425天。每年0.0075天听起来不算多,但在15世纪天文学家注意到了这一点可预测的事件,如至点和春分点,被“关闭”了大约10天。因此有了新的、改进的日历。)

在公历中,每月的天数如下:

月份名称天数

1月31日

2月28日或29日

3月3日31日

4月4日30日

5月5日至31日

6月6日30日

7月31日

8月8日31日

9月9日至30日

10月10日至31日

11月11日30日

12月12日31日

根据公历的闰年规则和通常的每月天数,使用日历完成课程。您将需要:

三个int字段变量,用于跟踪月份、日期和年份

FunWithCalendars的构造函数,它将接受月、日和年的值,并将它们分配给字段变量。(这是为您编写的,您可以使用启动程序文件FunWithCalendars.java)

方法:

布尔值有效()

它将返回一个true或false。A.true result表示月份和日期是该年的有效值

您将需要三种助手方法:

布尔isLeapYear()

只有当年份代表闰年时,才会返回真值

您还需要:

布尔值isValidMonth()

仅当月份字段介于1和12之间时,才会返回true。最后:

布尔值isValidDay()

只有在给定年份的该月存在该日时,才会返回true。当检查29在2月份是否有效时,记得检查闰年

同样,当且仅当从isValidMonth()和isValidDay()得到true时,我们期望isValid()为true。(我们假设所有年份均有效。)

测试:

2010年7月20日有效

2009年1月13日无效。(13不是有效月份。)

2009年11月31日无效。(该月不存在该日。)

2007年2月29日无效。(2007年不是闰年。)

2000年2月29日有效。(2000年是闰年。)

*/

感谢所有能帮忙的人


共 (1) 个答案

  1. # 1 楼答案

    让我们以第一次测试为例:

    Tests:

    7/20/2010 is valid.

    因此,在驱动程序类/测试类中,构造一个FunWithCalendars对象,表示2010年7月20日。为此,构造函数接受三个参数。接下来调用它的isValid方法。我相信这个想法是,你不应该再通过同样的论点。您的isValid方法接受两个boolean参数。相反,我认为它不应该接受任何参数,而应该调用两个helper方法来传递FunWithCalendars对象中已经存在的值。所以,在你可以让你的驱动程序类开始工作之前,我相信你必须在这一点上修正你的设计

    调用isValid()后,将返回值存储到变量中。将其与预期值进行比较(本例中为true)。如果它们相等,则打印测试通过的语句。如果它们不相等,则打印包含预期值和观察值的语句

    对其他测试也执行类似操作。不过,不要复制粘贴代码。而是将其包装在一个方法中,并为每个测试用例调用该方法,将特定测试所需的数据作为参数传递。请记住将预期结果作为参数包含,以便方法可以进行比较

    编辑:

    … My confusion is in how to construct an object (in general, and also specifically FunWithCalendars), how to call the isValid method and have it not take any arguments, how to have the isValid method call the two helper methods which pass the values that are in the FunWIthCalendars object.

    这是基础知识,我不认为堆栈溢出是教授基础知识的好地方。让我们试一试,只是请把你的期望定得低一点

    如何构造对象:您已经在您的驱动程序类中使用new运算符执行此操作:

        FunWithCalendars test = new FunWithCalendars () ;
    

    只需要将正确的参数传递给构造函数。您的构造函数接受三个int参数,因此它需要类似于:

        FunWithCalendars test = new FunWithCalendars(7, 20, 2020);
    

    如何调用isValid方法并使其不带任何参数,在上行之后:

        boolean calculatedValidity = test.isValid();
    

    这将从isValid()falsetrue)返回的值存储到我命名为calculatedValidity的新创建的boolean变量中。从那里,我们可以检查它是否具有预期值,根据它采取行动和/或打印它。最简单的方法是打印,例如:

        System.out.println("Is 7/20/2020 valid? " + calculatedValidity);
    

    不带参数的调用要求该方法没有任何参数:

    public boolean isValid () 
    { 
    

    如何让isValid()调用这两个helper方法:您可以简单地编写方法调用,而不必提及以前存在的参数。再次记住传递正确的参数:

        if (isValidMonth(month) && isValidDay(month, day, year, isLeapYear(year)) ) 
    

    在这里的方法调用中,我使用FunWithCalendars对象的实例变量(字段)作为参数。这导致该方法使用我们通过构造函数输入的数字,并使用三个helper方法

    我已经用上面的更改运行了您的代码。我的打印报表打印了预期的:

    Is 7/20/2020 valid? true
    

    PS我故意不说任何关于代码中可能存在的错误的事情。最好让你的测试告诉你是否有