Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的布尔语句以一种方式工作,但不是以一种看似不变的方式工作_Java_Boolean - Fatal编程技术网

Java 我的布尔语句以一种方式工作,但不是以一种看似不变的方式工作

Java 我的布尔语句以一种方式工作,但不是以一种看似不变的方式工作,java,boolean,Java,Boolean,为了使我的代码更加美观和简短,我尝试从以下内容更改代码: do { System.out.print("Enter day: "); day = input.nextInt(); if ((isLeapYear && month == 2 && (day < 1 || day > 29)) || (!isLeapYear && month == 2 && (day <

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

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)));
do
{
系统输出打印(“输入日期:”;
day=input.nextInt();
如果((isLeapYear&month==2&&(day<1 | | day>29))||
(!isLeapYear&month==2&&(日<1日>28))||
(月=4 | |月=6 | |月=9 | |月=11)和&(日<1 | |日>30))||
(月=1 |月=3 |月=5 |月=7 |月=8||
月==10 | |月==12)和&(日<1 | |日>30)
{
System.out.println(“无效输入”);
}
}
而((年和月==2日和(日<1日>29日))||
(!isLeapYear&month==2&&(日<1日>28))||
(月=4 | |月=6 | |月=9 | |月=11)和&(日<1 | |日>30))||
(月=1 |月=3 |月=5 |月=7 |月=8||
月=10 | |月=12)和&(日<1 | |日>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);
booleanInvalidDay=(isLeapYear&month==2&&(day<1 | | day>29))||
(!isLeapYear&month==2&&(日<1日>28))||
(月=4 | |月=6 | |月=9 | |月=11)和&(日<1 | |日>30))||
(月=1 |月=3 |月=5 |月=7 |月=8||
月=10 |月=12)和&(日<1 |日>30);
做
{
系统输出打印(“输入日期:”;
day=input.nextInt();
如果(无效日)
{
System.out.println(“无效输入”);
}
}
while(残疾日);

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

您正在从控制台获取day的值并在循环中进行检查,通过使用布尔变量,不会每次都进行检查,但之前的值仍然存在。如果要执行相同的操作,请在函数中执行该操作,并从循环内部调用它。

中,invalidDay,而()永远不会重新计算,您需要以某种方式向上调整其值。

表达式开头缺少一个开括号,表达式结尾缺少一个闭括号。。。应该是

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)));
booleanInvalidDay=((isLeapYear&month==2&&(day<1 | | day>29))||
(!isLeapYear&month==2&&(日<1日>28))||
(月=4 | |月=6 | |月=9 | |月=11)和&(日<1 | |日>30))||
(月=1 |月=3 |月=5 |月=7 |月=8||
月=10 | |月=12)和&(日<1 | |日>30);

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

其中n是天。

也许您应该在循环中重新计算条件?您是否尝试使用调试器跟踪此方法?这应该会暴露出你的错误。只是一个错误。如果您试图验证日期是否有效,应该有一种更简单的方法。看。我能说的就是这是一个高度不可维护代码的例子。通常1、3、5、7、10和12个月有31天!非常感谢,这只是你们又犯了一个愚蠢的错误。显然不能在询问用户之前使用day。通过将布尔表达式移到它自己的东西中,看到它不起作用,我认为我遗漏了一些我永远无法理解的底层Java东西
while(invalidDay(n));