请各位看看哪里出了错(java打印日历)

package calender;

import java.util.Scanner;

//使用方法来实现日历的打印

public class print {
	/**用户输入的年份*/
	public static int year=Integer.MIN_VALUE;//定义全局变量可以表示int型的最小值
	/**用户输入的月份*/
	
	public static int month=Integer.MIN_VALUE;//定义全局变量可以表示int型的最小值
	static int[]day= {31,28,31,30,31,30,31,31,30,31,30,31};//普通月
	public static void main(String[] args) {
		PrintCalender();//方法的调用
		
		
		
	}

	//打印日历的方法
	public static void PrintCalender() {
		//1.让用户输入年份和月份
       
		//2.计算1900-1-1到用户输入年份月份的总天数
		/**可以先输入1900到当前月的前一个月末的天数加上输入的天数*/
		//2-1计各年的总天数,2-2计算各月的总天数,\
		int sum=getSumDayOfYears( year);//得到年份中的天使
		sum+=getDayOfMonth( month);//得到月份中的天数
		//sum++;//到输入月的月首
	PrintMonthTitle();
	PrintCalenderContent(sum%7);
	}
		
		
		//3.打印年份和月份
	   //4,打印月份的标题
	private static void PrintMonthTitle() {
		String[] monthNames={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
	System.out.println(year+"\t"+monthNames[month-1]);
	System.out.print("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
	}
		
	
	
		//5.根据某月一日是星期几答应日历的内容
	private static void PrintCalenderContent(int dayofweek)
	{
		//day of week 从0到6
		int sepcount=0;
		if(dayofweek==0)
		{sepcount=6;}
		else { sepcount=dayofweek-1;}
		//分隔符的数量
		for(int i=0;i<sepcount;i++)
		{
			System.out.print("\t");
		}
		for(int i=0;i<day[month-1];i++)
		{
			System.out.print(i+1);//输入天数
			if((dayofweek+i)%7==0)//周日
			{
				System.out.println();
			}
			else
				System.out.println("\n");
			
				
		}
	}
	
	/**1.用来进行输入*/
	private static void WAY1() {
	     Scanner in=new Scanner(System.in);
	 	System.out.println("请输入相应的年份");
	     year=in.nextInt();//接收数据
	 	System.out.println("请输入相应的月份");
	     month=in.nextInt();
	     in.close();//相对专业的做法,用来节省空间
	     in=null;
	     }
	/**2.用来计算1900到year年的总天数*/
	private static int getSumDayOfYears(int year) {
	
		//判断年份是否正确输入if(year==Integer.MIN_VALUE)
		{
			System.out.println("年份输入错误,请重新输入");
			WAY1();
		}
		
		//如果用户没有正确输入,则可以调用way1使用户重复输入
		int sum=0;
		for(int i=1900;i<year;i++)
		{
			sum=sum+365;//每一年累加365天
			if(isLeapyear(i))
			{
				sum++;//闰年多加一天
			}
			return sum;
		}
			
		
		return sum;
	}
	/**计算year一月一号到year年month-1月总天数的方法*/
	private static int getDayOfMonth(int month)
	{
		int sum=0;
		
		if(month>12||month<1)
		{
			System.out.println("输入错误");
		}
		for(int i=0;i<month-1;i++)
		{
			sum=sum+day[i];
		}
		if((isLeapyear(year))&&month>=3)//如果是三月后的闰年,SUM又要+1
		{sum++;}
		return sum;
	}
	/**把是否闰年封装成方法
	 * 是闰年返回true*/
	private static boolean isLeapyear(int year) {
		return year%400==0||year%4==0&&year%100!=0;
	} 
	
	
	

}

2018/1/15

java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值