Java 为什么我的代码会进入条件应该为false的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

我有一种方法,可以根据月份和日期返回一年中的季节。前三次调用该方法时,效果良好。然而,第四个方法在应该返回秋天时返回spring

它应该绕过spring的else-if语句并继续下降,但当我调试它时,它并不是这样做的。它进入else if并返回它

我试着把月份和日期移来移去,但不管我把它放在哪里,它都会回到春天。我不明白为什么,因为这些参数不符合该特定语句的标准

这是我的密码:

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:是的,括号不是金子做的:)