如何将数组元素与标量值进行比较?
以下是包含错误的代码部分:
if(month != numMonth[])
System.out.printf("\n not a valid month");
if (day != daysInMonth[] && day> daysOfMonth[month])
System.out.printf("\n not a valid day");
if (year<1880 && year>2280)
System.out.printf("\n not a valid year");
在(day != daysInMonth[] && day> daysOfMonth[month])
expr中,我得到一个类文件预期错误。
答案 0 :(得分:0)
使用
if (month < 0 || month > 11)
或
if (month < 1 || month > 12)
取决于编号是从零开始还是从一开始。
和C
答案 1 :(得分:0)
您可以将数组的元素与标量进行比较,而不是整个数组。您使用的语法仅在声明时有效:
int numMonth[] = new int[10];
or
int numMonth[] = {1,2,3};
and so on
要与单个标量进行比较,您需要引用要与之比较的元素:
// to compare with the 1st entry
numMonth[0] == month; // with arrays being zero based
// to compare with the 2nd entry
numMonth[1] == month;
and so on
答案 2 :(得分:0)
我将建议一个更简单的替代方案(恕我直言)。
对于此任务,我将直接使用Calendar
类,以避免在数组中存储不同的日期和年份。在这里的特殊情况下,闰年可能是一个问题。
首先,验证年份。它们是这个链中最简单的验证,就像几个月一样,它们不依赖于输入的任何连续参数。你做的最后一次检查,在这种情况下成为第一个:
if (year < 1880 && year > 2280)
System.out.printf("\n not a valid year");
验证年份后,验证月份。它们也是一个简单的数字,但您必须定义如何管理它们。我将采用范围1 -> 12
:
if(month < 1 || month > 12)
System.out.printf("\n not a valid month");
最后,您在Calendar
的帮助下建立了一个日期。这样,您就可以获得与某个月相对应的正确天数。然后,您进行相应的验证。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); //Calendar manages the months
//from 0 to 11, that's why
//you need to substract 1
int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
maxDays
包含指定月份和年份的最大天数。现在,您只需要检查id,该日期的输入在以下范围内:
if (day < 1 || day > maxDays)
System.out.printf("\n not a valid day");
这样,您无需跟踪每个月的日期,也可以管理闰年。