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