0

如何将数组的元素与标量值进行比较?

这是有错误的代码部分:

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 我得到一个类文件预期的错误。

4

3 回答 3

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");

这样,您无需跟踪每个月的日子,还可以管理闰年。

于 2013-03-07T17:24:16.750 回答
0

利用

if (month < 0 || month > 11)

或者

if (month < 1 || month > 12)

取决于编号是从零开始还是从一开始。

&C

于 2013-03-07T17:08:32.767 回答
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
于 2013-03-07T17:09:35.907 回答