闰年逻辑的多个If语句,如何构建它们?

时间:2014-10-05 03:31:02

标签: java if-statement

因此,在此代码中,我试图让用户输入一年和一个月(前三个字母),然后确定特定月份包含的天数。由于涉及闰年的困难,我在编写用户输入“2月”作为月份的部分时遇到问题。当我测试它时,它说: “2002年2月有29天” “2002年2月有28天”

如何制作它只显示29天?

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a year: ");
    int year= input.nextInt();
    input.nextLine();
    System.out.println("Enter a month (first 3 letters with the first letter in uppercase): ");
    String month = input.nextLine();

    // leap year logic starts here
    if (year % 4 == 0 || "Feb".equals(month)) {
        System.out.println( month + year + "has 29 days");
    }
    else if (year % 4 > 0 || "Feb".equals(month)) {
        System.out.println( month + year + "has 28 days");
    }
    else if("Jan".equals(month) || "Mar".equals(month) ||
            "May".equals(month) || "July".equals(month) ||
            "Aug".equals(month) || "Oct".equals(month) ||
            "Dec".equals(month)) {
        System.out.println(month + year + "has 31 days");
    }
    else if ("Apr".equals(month)|| "Jun".equals(month) ||
             "Sep".equals(month) || "Nov".equals(month)) {
        System.out.println(month + year + "has 30 days");
    }

2 个答案:

答案 0 :(得分:1)

这只是条件语句中的一个简单的逻辑缺陷。你的OR应该是ANDs

if (year % 4 == 0 && "Feb".equals(month)){
    // Note the && above
    System.out.println( month + year + "has 29 days");
}
else if (year % 4 > 0 && "Feb".equals(month)){
    // Note the && above
    System.out.println( month + year + "has 28 days");
}

你的每个条件都是(A || B)。第一个条件,年%4 == 0正在评估为真,因此第二个条件甚至没有被评估(这称为布尔短循环)。

答案 1 :(得分:0)

除了使用“and”(&&)之外,您还需要将它们嵌套在构成闰年的各种条件中:

boolean feb = "Feb".equals(month);
if (feb) {
    if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
    { System.out.println("has 29 days"); }
    else { System.out.println("has 28 days"); }
} else if (....) { }

然而,我会使用带开关的数字月份:

// NB: if you use Date.getMonth() add +1
switch(month) {
  case 1,3,5,7,9,10,12:
    System.out.println("31 days");
    break;
  case 4,6,7,11:
    System.out.println("30 days");
    break;
  case 2:
    if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
      System.out.println("has 29 days");
    } else {
      System.out.println("has 28 days");
    }
    break;
  }

但当然最好的闰年功能是你不自己编程的功能。更好地检查系统库:http://www.java2s.com/Tutorial/Java/0040__Data-Type/Getthelastdayofamonth.htm