已知年月日如何去计算星期

题目要求:输出特定日期是星期几
以键盘录入的形式提供3个整数,按顺序分别表示为年、月、日。如果只输入一个
整数则表示年,需要判断该年是否是闰年;如果输入两个整数,则表示年和月,需要
输出该年中该月的天数;如果输入3个整数,表示为年、月、日,需要输出这一天是
星期几。

首先先整理一下解题思路
1)进行字符串输入的时候,利用String类中的split()方法,利用“,”进行分割,所以在年月日中间要用逗号隔开。然后再通过Integer.valueOf()方法,将纯数字字符串转换成整数。
2)首先先判断年份是平年还是闰年,再去判断月份,最后判断日,算出这一天是星期几。


import java.util.Scanner;

public class day {
public static void main(String[] args){
//a[]数组中存放的是闰年月份天数,数组的下标直接对应月份
int [] a ={0,31,29,31,30,31,30,31,31,30,31,30,31};
//b[]数组中存放的是平年月份天数,数组的下标直接对应月份
int [] b ={0,31,28,31,30,31,30,31,31,30,31,30,31};
int week =0;//定义计算周几的变量
System.out.println("请用以下形式输入整数:");
System.out.println("若只计算平年或闰年,则输入:'年'形式");
System.out.println("若只计算某年的某月有多少天,则输入:'年,月'形式");
System.out.println("若要计算某年某月的某天是周几,则输入:'年,月,日'形式");
Scanner sc = new Scanner (System.in);
String s = sc.nextLine();
String[] c = s.split(",");
int t = c.length;

//根据c数组的长度,利用switch来做判断,分别执行不一样的程序
switch(t){

//当输入长度是1时,只有年份的输入,则是计算平年闰年
case 1:
Integer year =Integer.valueOf(c[0]);
if((year%4==0)&&(year%100!=0)||year%400==0){
System.out.println(year+"是闰年");
}else{
System.out.println(year+"是平年");
}
break;

//当输入长度是2时,只有年份以及月份的输入,则要计算当年的那个月有多少天
case 2:
Integer year1 =Integer.valueOf(c[0]);
Integer month1 =Integer.valueOf(c[1]);
if((year1%4==0)&&(year1%100!=0)||year1%400==0){

int mon=a[month1];
System.out.println(year1+"年的"+month1+"月有"+mon+"天");

}else{

int mon=a[month1];
System.out.println(year1+"年的"+month1+"月有"+mon+"天");
}

break;

//当输入长度为3时,我们需要计算那天是周几
case 3:
Integer year2 =Integer.valueOf(c[0]);
Integer month2 =Integer.valueOf(c[1]);
Integer day =Integer.valueOf(c[2]);

int a1=(year2-1968-1)/4;//计算year2到1970年之间闰年的次数
int a2 = (year2-1970-1)*365+a1; //计算month之前几个月的总天数

//首先先判断是否是闰年,若是闰年,则进行一下操作
if((a2%4==0)&&(a2%100!=0)||a2%400==0){
//day2用于计算那一年月份的天数
int day2=0;
//利用数组,计算前几个月的天数总值
//假如输入的是第五个月的某一天,则先要计算前四个月有多少天,既然是计算闰年,则是使用闰年的那个数组
for(int i =1;i<month2;i++){
day2+=a[i];
}
//week等于年份天数+月份天数+当前月的第几天,由于1970年1月1号是周四,所以加上4。再利用取余的方法得到星期
week=(a2+day2+day+4)%7;
if(week==0){
System.out.println("这天是星期天");
}else{

System.out.println(year2+"年的"+month2+"月的"+day+"日是星期"+week);
}

}else{
//day2用于计算那一年月份的天数
int day2=0;
//利用数组,计算前几个月的天数总值
//若计算的是第五个月的某一天,则先要计算前四个月有多少天
for(int i =1;i<month2;i++){
day2+=b[i];
}
//week等于年份天数+月份天数+当前月的第几天,由于1970年1月1号是周四,所以加上4。再利用取余的方法得到星期
week=(a2+day2+day+4)%7;
if(week==0){
System.out.println("这天是星期天");
}else{
System.out.println(year2+"年的"+month2+"月的"+day+"日是星期"+week);
}
}
break;
default:
System.err.println("请正确输入数据");
break;
}
}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值