月份验证

时间:2016-10-06 01:53:56

标签: java validation

是的,我没有尝试使用switch()来验证用户输入 这里的场景是我正在验证与日历年相对应的数据。

我尝试验证如果您输入的月份包含30天(4月,6月,9月,11月),但输入日期值31,则会返回错误消息。

我不会撒谎。这是一个作业,我绝不希望任何人给我答案,但如果你能解释我做错了什么。

任何帮助都是很有帮助的。这是我尝试过的两个switch() es的语法。

switch(monthInput)

首次尝试:

case 1: 
 if((monthInput = 4 )&& (dayInput > 30))
 {
  System.out.printf("%n%d%s", dayInput, ERROR_MESSAGE[3]);
 }
 else if((monthInput = 6)&& (dayInput > 30))
 {
 System.out.printf("%n%d%s", dayInput, ERROR_MESSAGE[3]);
 }
 else if((monthInpt = 9)&& (dayInput > 30))
 {
 System.out.printf("%n%d%s", dayInput, ERROR_MESSAGE[3]);
 {
 else if((monthInput = 11) && (dayInput > 30))
 {
 System.out.printf("%n%d%s", dayInput, ERROR_MESSAGE[3]);
 }

第二次尝试:

switch(monthInput)
{
case 1:
   if((monthInput = 4 | monthInput = 6 | monthInput = 9 | monthInput = 11) && (dayInput < 30))
      {
      System.out.print("The day you entered is invalid for the month you specified
      }
                }

4 个答案:

答案 0 :(得分:1)

如果您愿意,可以继续使用switch语句。如果你打开月份,它会看起来像:

switch(monthInput) {
    case 2: // feb
        if (dayInput > (leapYear ? 29 : 28))
            ...
        break;
    case 4: // apr
    case 6: // jun
    case 9: // sep
    case 11: // nov
        if (dayInput > 30)
            ...
        break;
    case 1: // jan
    case 3: // mar
    case 5: // may
    case 7: // jul
    case 8: // aug
    case 10: // oct
    case 12: // dec
        if (dayInput > 31)
            ...
        break;
    default:
        // error
}

如果您已经了解了数组,那么您可以尝试使用包含每个月天数的数组,然后使用月份作为索引与适当的值进行比较。或者,您可以使用enum个月,如下所示:

public enum Month {
    JAN(31), FEB(28), MAR(31), APR(30), ....;

    private final int days;
    Month(int days) {
        this.days = days;
    }

    public int getDays(boolean leapYear) {
        if (this == FEB && leapYear)
            return days + 1;
        else
            return days;
    }
}

获取特定月份的日期将是Month.values()[monthInput].getDays(leapYear)

答案 1 :(得分:0)

在Java中,=用于分配值,==用于测试相等性。 OR也使用||而不是|

所以试试

if((monthInput == 4 || monthInput == 6 || monthInput == 9 ||  
                            monthInput == 11) && (dayInput < 30))
{
  System.out.print("The day you entered is invalid for the month you specified");
}

答案 2 :(得分:0)

交换机所采用的路径由控制语句决定(在本例中为monthInput)。当你写case 1时,你告诉交换机当monthInput的值为1时要执行哪些语句(换句话说,如果正在执行case 1的语句,那么我们已经知道了monthInput = 1)。所以在这种情况下,我不确定切换是否是验证的最佳选择,因为如果您已经知道值,则尝试验证monthInput是没有意义的。

此外,正如之前指出的检查等效性,您使用==而不是=,并使用||作为或运算符。

答案 3 :(得分:0)

除了明显的语法错误(==||)之外,更重要的问题是您不了解switch是什么。

当你看到

时,再次阅读你的书中的开关部分
switch (A) {
case X:
   XXX;
case Y:
   YYY;
}

它应该是:我将根据A的值切换逻辑。 case X:表示,如果A等于X,则会执行下面的逻辑。

在您的情况下,您执行类似的操作:

switch(month) {
case 1:
    if (month == 4 || month ==6) {
        ...
    }
...
}

行[{1}}表示,如果case 1:month,但在其下方,您会检查月份是否等于4或6,这将永远不会发生且没有任何意义。< / p>

在尝试使用之前,请先了解该工具。盲目猜测使用它是行不通的。