【发布时间】:2020-10-19 07:41:38
【问题描述】:
我有一个类的作业,我必须在其中创建一个类(称为 FunWithCalendars),它接受 3 个 int 值(月、日和年)并使用 1 个布尔方法 (isValid) 来检查总体日期是否为valid,它使用 3 个其他辅助方法(isLeapYear、isValidMonth、isValidDay)来确定给定的日期和月份是否有效。我现在想在 Eclipse 中测试我的文件。 到目前为止,我已经学会了用这段代码测试类/方法(我是新手,所以这是我知道的唯一方法):
public class driverFunWithCalendars {
public static void main(String [] args ) {
FunWithCalendars test = new FunWithCalendars () ;
System.out.println( test.FunWithCalendars () );
但是,当我必须输入方法中未定义的 int 值时,我不明白我应该如何测试布尔方法的真假。上面代码中的错误在“new FunWithCalendars () ;”和“(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;
}
}
}
}
}
基本上,我只想知道如何使用我的 isValid 方法使用 3 个 int 值(日期、月份、年份)测试我的代码,以查看日期是否有效。如果我的问题不清楚,或者我解释的分配方式令人困惑,我真的很抱歉,但就像我说我是 Java 和 Stackoverflow 问题的新手,我还没有理解 Java,以至于我可以更有效地提出问题和简洁的问题,但我真的希望你们中的一些人能帮助我。我还会附上我的原始作业的抄录,如果你想帮助我,它可能会减少你的困惑和帮助:
/* 我们今天使用的日历是公历,由意大利天文学家 Aloysius Lilius 设计,并由教皇格里高利十三世于 1582 年 2 月 24 日颁布。在公历中,一年的平均长度正好是 365.2425 天。我们可以通过一些相当复杂的“闰年”规则来实现这一点:
如果一年可以被 4 整除,则为闰年……除非它可以被 100 整除,在这种情况下,它不是闰年……除非它可以被 400 整除,在这种情况下,它就是闰年。
好的,这很令人困惑。让我们再试一次:
如果满足以下条件,一年是闰年:
一个。它可以被 400 整除
b.能被 4 整除,不能被 100 整除。
根据这些规则,1512、1600 和 2000 年是闰年。 1514、1700 和 1900 不是。
(你认为闰年只是每四年一次!朱利叶斯·凯撒的日历就是这种情况——这是错误的,因为每四年添加一个第 366 天将使我们的平均年长度为 365.25 天,而不是远更准确的 365.2425 天。每年 0.0075 天听起来并不多,但在 1500 年代,天文学家注意到可预测的事件,如至日和春分,“关闭”了大约 10 天。因此,改进了新的日历。 )
在公历中,每月的天数如下:
月份名称天数
1 月 31 日 1 日
2 月 2 日 28 日或 29 日
31 年 3 月 3 日
30 年 4 月 4 日
31 年 5 月 5 日
30 年 6 月 6 日
7 月 7 日 31 日
8 月 31 日
9 月 9 日 30 日
10 月 10 日 31 日
11 月 11 日 30 日
12 月 12 日 31 日
根据公历的闰年规则和通常的每月天数,完成 FunWithCalendars 类。您将需要:
三个 int 字段变量用于跟踪月、日和年。
FunWithCalendars 的构造函数,它将获取月、日和年的值,并将它们分配给字段变量。 (这是为你写的,你可以使用启动文件 FunWithCalendars.java )。
方法:
boolean isValid()
这将返回一个真或假。真正的结果意味着月份和日期是该年的有效值。
您将需要三个辅助方法:
boolean isLeapYear()
只有当年份代表闰年时才会返回真值。
你还需要:
boolean isValidMonth()
只有当月份字段在 1 到 12 之间时才会返回 true。最后:
boolean isValidDay()
只有当那一天存在于给定年份的那个月时才会返回 true。在查看 29 是否在 2 月有效时,请记得检查闰年!
再次,当且仅当我们从 isValidMonth() 和 isValidDay() 中得到一个 true 时,我们期望 isValid() 为 true。 (我们将假设所有年份都有效。)
测试:
7/20/2010 有效。
2009 年 13 月 1 日无效。 (13 不是有效月份。)
2009 年 11 月 31 日无效。 (那个月不存在那一天。)
2/29/2007 无效。 (2007 年不是闰年。)
2000 年 2 月 29 日有效。 (2000 年是闰年。)
*/
感谢任何可以提供帮助的人!
【问题讨论】:
-
这是一个很好的任务。它足够复杂,可以帮助您学习材料。
-
我同意,就像一个还在学习语法、方法和对象是什么、如何构造类和方法的初学者一样,这非常令人困惑。