A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我做得一道基础测题,代码如下:
  1. import java.util.Scanner;

  2. /**
  3. * 9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
  4. *
  5. * @author Lance
  6. *
  7. */
  8. public class Test9 {

  9.         public static void main(String[] args) {
  10.                 // 输入一个日期,传递给函数并打印机计算结果
  11.                 System.out.print("请按“yyyy-MM-dd”的格式输入一个日期:");
  12.                 Scanner scanner = new Scanner(System.in);
  13.                 String s = scanner.nextLine();
  14.                 scanner.close();
  15.                 calDate(s);
  16.         }

  17.         public static void calDate(String s) {
  18.                 // 将输入的包含日期的字符串分割成三个字符串,分别包含年、月、日
  19.                 String[] date = s.split("-");
  20.                 // 将字符串转换为数字
  21.                 int y = Integer.parseInt(date[0]);
  22.                 int m = Integer.parseInt(date[1]);
  23.                 int d = Integer.parseInt(date[2]);
  24.                 // 调用函数打印结果
  25.                 System.out.println("这是一年中的第" + dayCount(y, m, d) + "天。");
  26.                 System.out.println("这一天是" + getDOW(y, m, d) + "。");
  27.         }

  28.         // 判断一个年份是否为闰年
  29.         public static boolean isLeapYear(int y) {
  30.                 if (y % 400 == 0)
  31.                         return true;
  32.                 else if (y % 100 == 0)
  33.                         return false;
  34.                 else if (y % 4 == 0)
  35.                         return true;
  36.                 else
  37.                         return false;
  38.         }

  39.         // 计算一个日期是一年中的第几天
  40.         public static int dayCount(int y, int m, int d) {
  41.                 int count = 0;
  42.                 // 将一年中一至十二月的每个月的天数储存到一个整数数组中
  43.                 int[] dn = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  44.                 // 非闰年时的天数
  45.                 for (int x = 0; x < m; x++)
  46.                         count = count + dn[x];
  47.                 count = count + d;
  48.                 // 闰年时的天数
  49.                 if (isLeapYear(y) & m > 2)
  50.                         return count + 1;
  51.                 return count;
  52.         }

  53.         // 以1999年12月31日星期五为基准日期,计算一个日期与它之间相差的天数,并推算该日期为星期几
  54.         public static String getDOW(int y, int m, int d) {
  55.                 final int YEAR = 1999;
  56.                 // 定义一个字符串数组储存“星期一”到“星期日”七个字符串
  57.                 String[] wd = { "星期五", "星期六", "星期日", "星期一", "星期二", "星期三", "星期四" };
  58.                 int dif = 0, count = 0;
  59.                 if (y > YEAR) {
  60.                         // 计算所求日期与基准日期之间的闰年的个数
  61.                         for (int x = 2000; x < y; x+=4) {
  62.                                 if (isLeapYear(x))
  63.                                         count++;
  64.                         }
  65.                         dif = 365 * (y - YEAR - 1) + count + dayCount(y, m, d);
  66.                         return wd[dif % 7];
  67.                 } else if (y < YEAR) {
  68.                         // 计算所求日期与基准日期之间的闰年的个数
  69.                         for (int x = 1996; x > y; x-=4) {
  70.                                 if (isLeapYear(x))
  71.                                         count++;
  72.                         }
  73.                         dif = 365 * (YEAR - y + 1) + count - dayCount(y, m, d);
  74.                         return wd[wd.length - (dif % 7)];
  75.                 }
  76.                 return wd[0];
  77.         }

  78. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马