学习java到现在,尝试写了第一个小程序。
程序内容:一个输入日期然后可以打印日历并标注日期的小程序。
遇到的问题:1.如何解决遍历数组到星期6然后换行的问题。
2.如何解决判断是否换行和遍历数字的先后问题。
解决方法:1.用除7的余数来解决,一周只有7天,用7减去前面得到的开始于星期几的数字,因为开始的第一天也算的,所以还要加1就得到了第一行末端的数字。因为后面都是7天一次换行了,所以用从0开始的一个计数器判断在除七余数是这个数字的时候换行。但是要排除一种特殊情况,如何这个月从星期日开始,就变成了判断除7是否余7,无法换行,必须考虑特殊情况。
2.如果不考虑标示目标日期的情况下,2种都行,只是写法不同。但是要考虑一种情况如果标记的日期在最右端,计数器计数后就必须先判断然后换行,在继续遍历数字才满足条件。
1 package 可视化日历; 2 3 import java.text.DateFormat; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.GregorianCalendar; 9 import java.util.Scanner; 10 class Demo 11 { 12 public void run() 13 { 14 System.out.println("请输入日期:(格式为年-月-日)"); 15 Scanner s=new Scanner(System.in); 16 String tamp=s.nextLine();//捕获输入的日期 17 DateFormat format =new SimpleDateFormat("yyyy-MM-dd"); 18 try 19 { 20 Date d =format.parse(tamp); 21 Calendar calendar=new GregorianCalendar(); 22 calendar.setTime(d);//将字符串转换为日历格式 23 int day=calendar.get(Calendar.DATE); 24 calendar.set(Calendar.DAY_OF_MONTH, 1); 25 int begin=calendar.get(Calendar.DAY_OF_WEEK);//得到这月开始于星期几。 26 int max=calendar.getActualMaximum(Calendar.DATE);//得到这个月有多少天。 27 System.out.println("日\t一\t二\t三\t四\t五\t六"); 28 int b=0; 29 for(int x=1;x<begin;x++)//跳过前面,以便从正确的星期几开始。 30 { 31 System.out.print("\t"); 32 } 33 for(int a=1;a<=max;a++)//遍历日期,最大值为这个月最大的一天。 34 { 35 if(day==a) 36 { 37 System.out.print("*\t");//标记选择的日期。 38 b++;//b用来记录次数 39 } 40 else 41 { if(begin==1&&b%7==0)//特殊情况直接从星期日开始,余7的话,系统无法判断换行。 42 { 43 System.out.println(); 44 } 45 if(b%7==(7-begin+1))//用于7的余数来解决换行问题。 46 { 47 System.out.println(); 48 } 49 System.out.print(a+"\t"); 50 b++; 51 } 52 } 53 } 54 catch (ParseException e) 55 { 56 System.out.println("输入格式错误"); 57 } 58 } 59 } 60 public class Text_1 61 { 62 public static void main(String[] args) 63 { 64 Demo d=new Demo(); 65 d.run(); 66 } 67 }
如果输入:2017.7.21日
结果为:
原文:http://www.cnblogs.com/wyfads/p/7220055.html