我如何使用switch语句在Java中编写一种方法来计算给定日期的季节?

问题描述 投票:-3回答:3

我已经看到了几个使用switch语句的示例,每个案例在不同的季节一次运行3个月。但是我想使用switch语句创建一个方法,其中季节从特定日期开始,例如:


12月21日-3月20日=冬季

3月21日-6月20日=春季

[6月21日-9月=夏季

9月21日-12月20日=秋天


我想使用用户输入的int变量分别表示月份和日期。

[请有人告诉我我该怎么做?请记住我对编码还很陌生

我当前的代码包括一种检查日期是否有效但仍在进行中的方法:

package seasonclassification;

import java.util.Scanner;

public class SeasonClassification {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the month in terms of numbers (e.g March = 3) you wish to check the season of:");
    int calMonth = scan.nextInt();
    System.out.println("Enter the day in terms of numbers (e.g 27th = 27):");
    int calDay = scan.nextInt();
}

public static boolean isValidDate(int month, int day) {
    boolean x;
    if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12) && (day >= 1) && (day <= 31)) {
        x = true;
    }

    if ((month == 4) || (month == 6) || (month == 9) || (month == 11) && (day >= 1) && (day <= 30)) {
        x = true;
    }

    if ((month == 2) && (day >= 1) && (day <= 29)) {
        x = true;
    } 

    else {
        x = false;
    }

    return x;
}

public static String findSeason(int month, int day) {
    switch (month,day) {
    }
}
}
java date methods switch-statement
3个回答
0
投票

您可以在month上使用切换语句,然后在一个月可能超过一个季节的情况下使用if语句。例如:

public static String findSeason(int month, int day) { 
    switch (month) {
        case 1: // January - Same season; Fall through to next case
        case 2: // February
            return "Winter";
        case 3: // March
            // Season change - check day of month
            return (day <= 20 ? "Winter" : "Spring");
        /* The rest of your cases here */ 

我想可以用day上的开关代替if语句,但是同样,这种情况不适合。您还必须每个月的每一天写大约30个左右的案例,这既不会很有趣,也不是一个优雅的解决方案。

编辑:在情况3中,这是一个三元运算符。您可以阅读有关它的内容here.


1
投票

首先,您过早优化。其次,它很丑(真的很丑)。但是,您需要一个示例,因此您可以]

public static void main(String[] args) {
  java.util.Date[] testDates = new java.util.Date[] {
      new java.util.Date(114, 11, 20),
      new java.util.Date(114, 11, 21),
      new java.util.Date(114, 2, 20),
      new java.util.Date(114, 2, 21),
      new java.util.Date(114, 5, 20),
      new java.util.Date(114, 5, 21),
      new java.util.Date(114, 8, 20),
      new java.util.Date(114, 8, 21) };
  for (java.util.Date d : testDates) {
    System.out.print(d);
    System.out.print(" ");
    System.out.println(getSeasonName(d));
  }
}

private static String getSeasonName(
    java.util.Date date) {
  java.util.Calendar c = java.util.Calendar
      .getInstance();
  c.setTime(date);
  switch (c.get(java.util.Calendar.MONTH)) {
  case java.util.Calendar.MARCH:
    if (c.get(java.util.Calendar.DAY_OF_MONTH) > 20) {
      return "Spring";
    }
    return "Winter";
  case java.util.Calendar.APRIL:
  case java.util.Calendar.MAY:
    return "Spring";
  case java.util.Calendar.JUNE:
    if (c.get(java.util.Calendar.DAY_OF_MONTH) > 20) {
      return "Summer";
    }
    return "Spring";
  case java.util.Calendar.JULY:
  case java.util.Calendar.AUGUST:
    return "Summer";
  case java.util.Calendar.SEPTEMBER:
    if (c.get(java.util.Calendar.DAY_OF_MONTH) > 20) {
      return "Autumn";
    }
    return "Summer";
  case java.util.Calendar.OCTOBER:
  case java.util.Calendar.NOVEMBER:
    return "Autumn";
  case java.util.Calendar.DECEMBER:
    if (c.get(java.util.Calendar.DAY_OF_MONTH) < 21) {
      return "Autumn";
    }
  }
  return "Winter";
}

输出

Sat Dec 20 00:00:00 EST 2014 Autumn
Sun Dec 21 00:00:00 EST 2014 Winter
Thu Mar 20 00:00:00 EDT 2014 Winter
Fri Mar 21 00:00:00 EDT 2014 Spring
Fri Jun 20 00:00:00 EDT 2014 Spring
Sat Jun 21 00:00:00 EDT 2014 Summer
Sat Sep 20 00:00:00 EDT 2014 Summer
Sun Sep 21 00:00:00 EDT 2014 Autumn

0
投票

switch语句在这种情况下不应该使用。

© www.soinside.com 2019 - 2024. All rights reserved.