Java 为什么我的代码会进入条件应该为false的else-if语句?
我有一种方法,可以根据月份和日期返回一年中的季节。前三次调用该方法时,效果良好。然而,第四个方法在应该返回秋天时返回spring 它应该绕过spring的else-if语句并继续下降,但当我调试它时,它并不是这样做的。它进入else if并返回它 我试着把月份和日期移来移去,但不管我把它放在哪里,它都会回到春天。我不明白为什么,因为这些参数不符合该特定语句的标准 这是我的密码:Java 为什么我的代码会进入条件应该为false的else-if语句?,java,if-statement,Java,If Statement,我有一种方法,可以根据月份和日期返回一年中的季节。前三次调用该方法时,效果良好。然而,第四个方法在应该返回秋天时返回spring 它应该绕过spring的else-if语句并继续下降,但当我调试它时,它并不是这样做的。它进入else if并返回它 我试着把月份和日期移来移去,但不管我把它放在哪里,它都会回到春天。我不明白为什么,因为这些参数不符合该特定语句的标准 这是我的密码: public static void main(String[] args) { System.out.pri
public static void main(String[] args) {
System.out.println(season(1, 5));
System.out.println(season(4, 12));
System.out.println(season(7, 1));
System.out.println(season(10, 31));
}
public static String season(int month, int day) {
if(month >= 12 && day >= 16 || month <= 3 && day <= 15) {
return "winter";
} else if(month >= 3 && day >= 16 || month <= 6 && day <= 15) {
return "spring";
} else if(month >= 6 && day >= 16 || month <= 9 && day <= 15) {
return "summer";
} else {
return "fall";
}
}
publicstaticvoidmain(字符串[]args){
系统输出打印(第1、5季);
系统输出打印(第4、12季);
系统输出打印(第7、1季);
系统输出打印(第10、31季);
}
公共静态字符串季节(整数月,整数日){
如果(月>=12&&day>=16 | | |月=16 | |月=16 | | | | | |月您的程序完全按照您的要求执行。当您调用季节(10,31)
时,您将进入测试:
if (month >= 3 && day >= 16 || ...)
这是正确的,因为月份是10天,日期是31天(都比他们在测试中的目标大)。显然,这不是你想要的。所以你必须做一个稍微复杂一点的测试:
if (month == 3 && day >= 16 || month > 3 && month < 6 || month == 6 && day <= 15)
if(month==3&&day>=16 | | | month>3&&month<6 | | month==6&&day如果您删除前一半条件,它将正常工作
public static String season(int month, int day)
{
if(month <= 3 && day <= 15)
{
return "winter";
}
else if(month <= 6 && day <= 15)
{
return "spring";
}
else if(month <= 9 && day <= 15)
{
return "summer";
}
else
{
return "fall";
}
}
公共静态字符串季节(整数月,整数日)
{
如果(使用()
来显式地将&&
和|
的操作数分组,不要把它留给编译器。它不会总是像你期望的那样从可视化布局中做。是的,永远不要羞于使用额外的()
或两三个。@Hot:是的,括号不是金子做的:)