黑马程序员技术交流社区
标题:
如何解决2月出现29天的情况
[打印本页]
作者:
曾欢欢
时间:
2014-5-9 08:54
标题:
如何解决2月出现29天的情况
本帖最后由 曾欢欢 于 2014-5-9 23:29 编辑
import java.util.*;
public class u4 {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入年份");
int year=in.nextInt();
System.out.println("请输入月份");
int month=in.nextInt();
int sum=0;
int u=0;
for(int i=1900;i<year;i++){
if(i%4==0&&i%100!=0||i%400==0){
sum+=366;
}else{
sum+=365;
}
}
for(int I=1;I<month;I++){
if(I==2){
if(year%4==0&&year%400==0||year%100!=0){
sum+=29;
}else{
sum+=28;
}
}else if(I==4||I==6||I==9||I==11){
sum+=30;
}else{
sum+=31;
}
}
/*
sum+=7;
System.out.println("1900年1月1日到2016年5月7日一共:"+sum+"天");
System.out.println("2016年5月7日为星期"+sum%7);
*/
int wekday=sum%7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=1;i<=wekday;i++){
System.out.print("\t");
}
if(month==2){
if(year%4==0&&year%400==0||year%100!=0){
u=29;
}else{
u=28;
}
}else if(month==4||month==6||month==9||month==11){
u=30;
}else{
u=31;
}
for(int i=1;i<=u;i++){
if(sum%7==6){
System.out.print(i+"\n");
}else{
System.out.print(i+"\t");
}
sum++;
}
}
}
作者:
jzxyhjl
时间:
2014-5-9 16:19
package test;
import java.util.*;
/**
* 输入年月,返回当月的日历
* @author asus
*
*/
public class MonthTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入年份");
int year = in.nextInt();
System.out.println("请输入月份");
int month = in.nextInt();
long sum = 0;//sum可能会是个大数这里用long型保存比较好
int u = 0;//用来保存当月的天数
boolean leapYear = false; //标志位,是否闰年的标志
//计算从1900年到输入的年份(不含当年)之间的天数
for (int i = 1900; i < year; i++) {
//区分当年是否是闰年
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
sum += 366;
leapYear = true;
} else {
sum += 365;
leapYear = false;
}
}
//计算从1月份到输入的月份(不含当月)之间的天数
for (int I = 1; I < month; I++) {
if (I == 2) {
if (leapYear) {
sum += 29;
} else {
sum += 28;
}
} else if (I == 4 || I == 6 || I == 9 || I == 11) {
sum += 30;
} else {
sum += 31;
}
}
/*
* sum+=7; System.out.println("1900年1月1日到2016年5月7日一共:"+sum+"天");
* System.out.println("2016年5月7日为星期"+sum%7);
*/
//计算输入的年月的上一个月的最后一天是周几
long wekday = sum % 7;
System.out.println("日\t一\t二\t三\t四\t五\t六");
//使用/t占位,找到输入的月份的第一天的位置
for (int i = 0; i <= wekday; i++) {
System.out.print("[]\t");
}
//获取输入月份的天数
if (month == 2) {
if (leapYear) {
u = 29;
} else {
u = 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
u = 30;
} else {
u = 31;
}
//将当月的日期与星期对应
for (int i = 1; i <= u; i++) {
sum++;
if (sum % 7 == 6) {
System.out.print(i + "\n");
} else {
System.out.print(i + "\t");
}
}
}
}
复制代码
程序做了一些小改动,一个是在后两次判断是否为闰年的时候条件错了,一个是在算当月的第1天是周几的时候少算了1天
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2