为了让我的代码更美观和简短,我试图改变我的代码:
do
{
System.out.print("Enter day: ");
day = input.nextInt();
if ((isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30)))
{
System.out.println("Invalid input");
}
}
while ((isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30)));
到此:
boolean invalidDay = (isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30));
do
{
System.out.print("Enter day: ");
day = input.nextInt();
if (invalidDay)
{
System.out.println("Invalid input");
}
}
while (invalidDay);
第二种方法不能按预期工作,但第一种方式完美无缺。我唯一改变的是将long boolean表达式放入一个布尔变量中。感谢。
答案 0 :(得分:1)
invalidDay 永远不会重新计算,您需要以某种方式提升其值
答案 1 :(得分:0)
您从控制台获取day值并检入循环,通过使用boolean变量,每次都不会执行检查,但前一个值仍然存在。如果你想在一个函数中做同样的事情,并从循环内部调用它。
答案 2 :(得分:0)
你在表达式的开头缺少一个开括号,而在表达式结尾处缺少一个结束括号......它应该是
boolean invalidDay = ((isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30)));
答案 3 :(得分:-1)
在while循环中,参数invalidDay永远不会更新。您可以为无效日创建方法。这里:
public boolean invalidDay(int day) {
return (isLeapYear && month == 2 && (day < 1 || day > 29)) ||
(!isLeapYear && month == 2 && (day < 1 || day > 28)) ||
((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30)) ||
((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
month == 10 || month ==12) && (day < 1 || day > 30));
}
现在,在你的while循环中,使用:
while(invalidDay(n));
其中n是一天。