是的,我没有尝试使用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
}
}
答案 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>
在尝试使用之前,请先了解该工具。盲目猜测使用它是行不通的。