[Java] Java通过矩阵法计算某一天是星期几 →→→→→进入此内容的聊天室

来自 , 2020-11-01, 写在 Java, 查看 115 次.
URL http://www.code666.cn/view/47257279
  1. package com.haliluya.java.oj;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class judgyDay {
  6.        
  7.         private static final int  startYear = 1900;
  8.         private static final int[][] dayMap = {         {0,1,2,3,4,5,6},
  9.                                                                                                 {1,2,3,4,5,6,0},
  10.                                                                                                 {2,3,4,5,6,0,1},                                                                                               
  11.                                                                                                 {3,4,5,6,0,1,2},
  12.                                                                                                 {4,5,6,0,1,2,3},
  13.                                                                                                 {5,6,0,1,2,3,4},
  14.                                                                                                 {6,0,1,2,3,4,5}
  15.                                                                                         };
  16.        
  17.         public static void main(String[] args) {
  18.                
  19.                 Scanner s = new Scanner(System.in);
  20.                 System.out.println("请输入年");
  21.                 int year = s.nextInt();
  22.                 System.out.println("请输入月");
  23.                 int month = s.nextInt();
  24.                 System.out.println("请输入号");
  25.                 int hao = s.nextInt();
  26.                                
  27.                
  28.                 System.out.println("输入的年 = "+year);
  29.                 System.out.println("输入的月 = "+month);
  30.                 System.out.println("输入的日 = "+hao);
  31.                
  32.                 int dayOfWant = 0;
  33.                
  34.                 dayOfWant = judgyDayOfAnyYearAnyMonth(year,month,hao);
  35.                
  36.                 System.out.println("对应的星期为 (从0算) = "+dayOfWant);
  37.         }
  38.  
  39.         /**
  40.          * 根据输入的年 月以及号 得到改天的星期数
  41.          * @param year
  42.          * @param month
  43.          * @param hao
  44.          * @return
  45.          */
  46.         private static int judgyDayOfAnyYearAnyMonth(int year, int month, int hao) {
  47.                
  48.                 //参数检查         
  49.                 if(year< 1900 ||year >9999 ){
  50.                         return -1;
  51.                 }
  52.                 if(month<0 ||month >12){
  53.                         return -1;
  54.                 }
  55.                 if(hao<0 || hao>31 ){
  56.                         return -1;
  57.                 }
  58.                
  59.                 //业务开始
  60.                 //1 算出该月1号距离1900年1月1号多少天
  61.                 int daysOfLastMonthTotal = gatDaysOfLastMonthTotal(year,month);
  62.                 //2 的出该月1号是星期几
  63.                 int firstDay = daysOfLastMonthTotal %7;
  64.                 System.out.println("给定的月初星期几(从0算)  = "+(firstDay));
  65.                
  66.                 //3 算出该号是星期几
  67.                 int dayJudgyByFirstDay = getDayJudgyByFirstDay(firstDay,hao);
  68.  
  69.                
  70.                 return dayJudgyByFirstDay;
  71.         }
  72.  
  73.         private static int getDayJudgyByFirstDay(int firstDay, int hao) {
  74.                 hao = hao%7;
  75.                 if(hao ==0){
  76.                         hao =7;
  77.                 }
  78.                 hao -=1;//调整到0下标
  79.                 System.out.println("取map的第 "+firstDay + "行,第"+ hao +"列");
  80.                 return dayMap[firstDay][hao];
  81.         }
  82.  
  83.         /**
  84.          * 算出给定年月的第一天的距离1900的天数
  85.          * @param year
  86.          * @param month
  87.          * @return
  88.          */
  89.         private static int gatDaysOfLastMonthTotal(int year, int month) {
  90.                 // 先算年的求和
  91.                 int totalday = 0;
  92.                 for(int thisYear = startYear+1 ;thisYear<=year ;thisYear++){
  93.                         totalday += getTotalDaysByYear(thisYear);
  94.                 }
  95.                
  96.                 //再不上月的求和
  97.                 for(int i = 1;i <month;i++){
  98.                        
  99.                         switch(i){
  100.                         case 1:
  101.                         case 3:
  102.                         case 5:
  103.                         case 7:
  104.                         case 8:
  105.                         case 10:
  106.                         case 12: totalday+= 31;break;
  107.                         case 2:
  108.                                 if(isRunYear(year)){
  109.                                         totalday+= 29;break;
  110.                                 }else
  111.                                 {
  112.                                         totalday+= 28;break;
  113.                                 }                              
  114.                         case 4:
  115.                         case 6:
  116.                         case 9:
  117.                         case 11:totalday+= 30;break;
  118.                         }
  119.                 }
  120.                
  121.                 System.out.println("给定年月的第一天距离1900的天数  = "+totalday);
  122.                
  123.                 return totalday;
  124.         }
  125.  
  126.         /**
  127.          * 判断该年有多少天
  128.          * @param thisYear
  129.          * @return
  130.          */
  131.         private static int getTotalDaysByYear(int thisYear) {
  132.                 if((thisYear%4 ==0 && thisYear %100!= 0)||thisYear%400 ==0){
  133.                         return 366;//二月多一天 29天
  134.                 }
  135.                 return 365;
  136.         }
  137.        
  138.         private static boolean isRunYear(int thisYear){
  139.                 return ((thisYear%4 ==0 && thisYear %100!= 0)||thisYear%400 ==0);
  140.         }
  141.  
  142. }
  143.  
  144. //java/8493

回复 "Java通过矩阵法计算某一天是星期几"

这儿你可以回复上面这条便签

captcha