今天终于调好了一个稍微复杂点的程序,很值!

import java.util.Scanner;
 public class Demo_rili {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("这是一个输入年份及月份显示日历的程序");
System.out.println("请输入年份");
int year = sc.nextInt();
System.out.println("请输入月份");
int month = sc.nextInt();
//测试语句
System.out.println("      "+ year + "年 " + month + "月"); //标题
System.out.println("---------------------------");  //分割线
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
printbody(month,year);



}
public static void printbody(int month,int year){
int startday = (yearDays(1800,year)+ 3 + monthDays(month,year))%7; //找出星期几
int monthday = getMonthDay(month,year); //找出当月有几天
for (int i = 0;i < startday ;i++) {
System.out.print("    ");
}
for (int j =1 ;j <= monthday ;j++ ) {
System.out.printf("%4d",j);
if ((startday+j)%7 == 0) {
System.out.println();
}
}
System.out.println();


}


//计算指定某年,某月1日到同年1月1日的天数
public static int monthDays(int month,int year){
int day =0;
for (int i = 1;i < month;i++) {
day = day + getMonthDay(i,year);
                }
                return day;
        }
//计算某年是不是闰年
public static int runNian(int year){
int day = 0;
if((year % 4 == 0 & year % 100 != 0)|| year % 400 == 0){
day = 1;
}
return day;
}


//计算两个年份之间有几个闰年
public static int runNianSu(int startyear,int overyear){
int su = 0; 
for (int i = startyear; i < overyear; i++) {
if (runNian(i) == 1) {
su++;
}
}
return su;
}


//计算某年到某年之间有多少天
public static int yearDays(int startyear,int overyear){
int day = (overyear - startyear)*365+runNianSu(startyear,overyear);
return day;
}
 
//计算某个月有多少天
public static int getMonthDay(int month,int year){
int i = month;
        if (i== 1|i==3|i==5|i==7|i==8|i==10|i==12) {
return 31;
        }else if (i == 2) {
if (runNian(year) == 1){
return 29;
            }
                return 28;
         }
            return 30;
    }
        

}

这是当时的分析,很杂,但是把问题分解的思路是对的.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值