我是Java的初学者,所以我不确定为什么程序在编译后没有按照我的意愿行事。我已经声明了变量并编译了。这就是代码的外观:
if((month == 2) && day >= 1 && day <= 28)
{
System.out.println(month + "/" + day + " is in the Winter season.");
}
else if((month == 2) && (day < 1 && day > 28))
{
System.out.println("Invalid day!");
}
然而,当我运行它时: 输入月份(1-12):2 输入日(1-28):30
它忽略了最后一个if语句,因为它应该说无效的一天!如果我要输入: 输入月份(1-12):2 输入日(1-28):20 2/28是冬季。
它按照我的计划行事。我确实改变了我的代码,并且这有用了:
if((month == 2) && day >= 1 && day <= 28)
{
System.out.println(month + "/" + day + " is in the Winter season.");
}
else if((month == 2) && !(day < 1 && day > 28))
{
System.out.println("Invalid day!");
}
有效。有人可以解释为什么第一个代码不起作用但第二个代码不起作用?我的逻辑是不正确的?
答案 0 :(得分:0)
更改
day < 1 && day > 28
到
day < 1 || day > 28
在else if
答案 1 :(得分:0)
您的第一个代码包含(day < 1 && day > 28)
- 这是不可能的,即一天不能同时小于1 AND 大于28
您的第二个代码包含!(day < 1 && day > 28)
[替代 - (day < 1 || day > 28)
] - 这是可能的&amp;正确并且意味着一天可以小于1 OR 可以大于28
因此,您的第二个代码正在运作。
答案 2 :(得分:0)
这个条件
(day < 1 && day > 28)
如果day
小于1 且相同day
超过28,则返回true,这是不可能的。您应该使用或运算符(||
)代替。所以你的代码将是
if((month == 2) && day >= 1 && day <= 28)
{
System.out.println(month + "/" + day + " is in the Winter season.");
}
else if((month == 2) && (day < 1 || day > 28))
{
System.out.println("Invalid day!");
}
答案 3 :(得分:0)
您的else if
应如下:
else if((month == 2) && (day < 1 || day > 28))
这是解释。如果有两件事情,你想进入else if
区块:
2
)28
天的事实,该月的天数为“无效”。二月天什么时候“无效”?当 <小于0“或”大于28“时,它可能无效。也就是说,您需要OR操作||
,而不是当前的AND操作,&&
。
答案 4 :(得分:0)
(day < 1 && day > 28)
永远不会成为现实,因为int
不能低于1且大于28。
将其更新为:(day < 1 || day > 28)
答案 5 :(得分:0)
&安培;&安培;仅当两个布尔运算都为真时,运算符才会返回true。
(day < 1 && day > 28)
当day = 30时,第一个布尔表达式day&lt; 1被评估为false。因此,即使第二个表达式为真,结果也是错误的。
!(day < 1 && day > 28)
这里,我们取组合表达式的NOT值。即使是一个表达式,如果为false,它也会将其评估为真。
正确的方法是使用以下格式。
else if((month == 2) && (day < 1 || day > 28))
答案 6 :(得分:0)
else if((month == 2) && (day < 1 && day > 28))
{
System.out.println("Invalid day!");
}
在此代码段中,您可以看到(日期&lt; 1&amp;&amp; day&gt; 28)错误的情况。由于日期不能同时满足他们两个。它应该是这样的。
else if((month == 2) && (day < 1 || day > 28))
{
System.out.println("Invalid day!");
}