1

为了使我的代码更加美观和简短,我尝试从以下内容更改我的代码:

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

第二种方法没有按预期工作,但第一种方法效果很好。我唯一改变的是将长布尔表达式放入单个布尔变量中。谢谢。

4

4 回答 4

1

你的while()中的invalidDay永远不会重新计算,你需要以某种方式更新它的值

于 2013-06-30T10:45:38.657 回答
0

您正在从控制台获取 day 的值并在循环中检查,通过使用布尔变量检查不是每次都完成,但之前的值仍然存在。如果您想做同样的事情,请在函数中执行并从循环内部调用它。

于 2013-06-30T10:45:21.827 回答
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)));
于 2013-06-30T10:47:37.893 回答
-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 是日期。

于 2013-06-30T11:03:32.830 回答