编写程序提示用户输入日期,输出这天为星期几。

本文介绍了一个Java程序,用于计算输入日期是星期几,包括判断闰年、计算距离指定日期的天数等关键功能。通过用户输入年月日,程序能够准确返回该日期对应的星期名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package judgeWeekday;

import java.util.Scanner;

public class JudgeWeekday {

    //参考点选择2014年1月1日星期三具有一定的特殊性;代码也与之有关。
    public static final int YEAR0 = 2014;
    //public static final int MONTH0 = 1; 
    //public static final int DAY0 = 1;
    public static final int WEEKDAY0 = 3;
    public static final String week[]={"天","一","二","三","四","五","六"};
    public static final int leapmonthday[]={31,29,31,30,31,30,31,31,30,31,30,31};
    public static final int noleapmonthday[]={31,28,31,30,31,30,31,31,30,31,30,31};
    
    
    public static void main(String[] args) {
        
        Scanner console = new Scanner(System.in);
        System.out.print("input the date like 1983 3 29: "); 
        int year = console.nextInt();
        int month = console.nextInt();
        int day = console.nextInt();
        boolean ynleap = judgeleap(year);
        
        int weekday = judgeWeekday (year,month,day,ynleap);
        
        System.out.println( year + "年" + month + "月" + day +"日是星期" + week[weekday]);
    }
    
    
    public static int judgeWeekday (int year,int month,int day,boolean ynleap)
    {
        int sum = computeDaysDistance(year,month,day,ynleap);
        int weekday = getWeekday(sum,year);
        return weekday;
    }
    
    //计算输入输入日期与参考日期相隔的天数。
    public static int computeDaysDistance(int year,int month,int day,boolean ynleap)
    {
        int sum = 0,sum1 = 0,sum2 = 0;
        if(year <  YEAR0)
        {
            //计算sum1
            for(int i = year + 1;i <  YEAR0;i++)
            {   
                if(judgeleap(i))
                   sum1 += 366;
                else
                   sum1 += 365;
            }
            //计算sum2
            if(ynleap)
             {
               sum2 = leapmonthday[month - 1]- day +1;
              for(int j = month + 1;j <=12;j++)
                sum2 += leapmonthday[j - 1];
             }
             else
             {
               sum2 = noleapmonthday[month -1]- day +1;
              for(int j = month + 1;j <=12;j++)
                 sum2 += noleapmonthday[j - 1];
             }
        }
        else
        {
            //计算sum1
            for(int i = YEAR0;i < year;i++)
             {
             if(judgeleap(i))
                   sum1 += 366;
                else
                   sum1 += 365;
             }
            //计算sum2
            sum2 = day -1;
            for(int j = 1;j <= month -1;j++)
           { 
                if(ynleap)
                  sum2 += leapmonthday[j - 1];
                else
                  sum2 += noleapmonthday[j -1];
           }
            
        }
        //计算sum
        sum =sum1 + sum2;
        return sum;
    }
    //给与参考日期相隔的天数得到输入日期是星期几。
    public static int getWeekday(int sum,int year)
    {
        int weekday = 0;
        if(year <  YEAR0)
             weekday = (WEEKDAY0 + 7 - (sum %7))%7;
        else
             weekday = (WEEKDAY0 + (sum % 7))%7;
        return weekday;
    }
    //判断给定的year是否闰年。
    public static boolean judgeleap(int year)
    {
         boolean ynleap;
          if(((year % 4 ==0)&&(year % 100!= 0))||(year % 400 == 0))
             ynleap = true;
          else
             ynleap = false;
          return ynleap;
    }

}//class

 

转载于:https://www.cnblogs.com/diligentcalf/p/3601170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值