学习进展到了136页,进度还不错。Java的类用起来还是比较舒服的,和汇编语言真是有太大的不同了!
listing 4-3在137页
(所有版权属于Core Java的作者。以下代码仅仅属于私人研究。高手慎入,都是一些初级的东西。)
//listing 4-1 的例子
import java.util.*;
import java.text.DateFormatSymbols;
public class ShowCalendar {
/**
* @param args
*/
public static void main(String[] args) {
// 学习Calendar类的使用
GregorianCalendar d=new GregorianCalendar();
int today=d.get(Calendar.DAY_OF_MONTH);
int month=d.get(Calendar.MONTH);
d.set(Calendar.DAY_OF_MONTH, 1);//把日期设在1号
int weekday=d.get(Calendar.DAY_OF_WEEK);//1号是2,是星期一)
//System.out.println("数字"+weekday+"代表星期一");
String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
//试验:System.out.printf("%s \r", weekdayNames[weekday]);//加上一个回车符:\r
//把星期天到星期六打印一遍,星期天对应的是整数1,星期一对应整数2...
//for(int i=1; i<8;i++) System.out.print(weekdayNames[i]+ " ");
System.out.println("\r"+d.getFirstDayOfWeek());
System.out.println("today is "+today);
int firstDayOfWeek=d.getFirstDayOfWeek();
int indent=0;
//这面这段代码比较操蛋,一般的人会难以理解,但是具有通用性
//因为法国挂历的习惯是从星期一开始每个星期的第一天,中国是从星期天开始
while(weekday!=firstDayOfWeek){
indent++;
//每次减1,直到日期与星期天(在法国可能是星期一)对齐,
//然后算减了几次,每次减1,indent都要增加一次
d.add(Calendar.DAY_OF_MONTH, -1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
System.out.println("The indent is:"+indent);
do{
//下面这行比较搞笑,注意%4s,
//会打出 1个空格+三个中文字,注意中英文混排时会出现这种情况
System.out.printf("%4s",weekdayNames[weekday]);
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}while(weekday!=firstDayOfWeek);
System.out.println();
//每个indent相当于6个空格--两个空格+三个中文字, 这样才能对齐
//如果indent=0,下面这段for循环是不会执行的
for(int i=1;i<=indent*6;i++) System.out.print("~");
d.set(Calendar.DAY_OF_MONTH, 1);
//d.set(Calendar.YEAR, 2010);
do{
//数字占5个空,另加一个*或者一个空,就有6个空了
System.out.printf("%5d",d.get(Calendar.DAY_OF_MONTH));
if(d.get(Calendar.DAY_OF_MONTH)==today)//如果是今天,就在后面加上一个*
System.out.print("*");
else
System.out.print(" ");//如果不是今天,就在后面加上一个空格
d.add(Calendar.DAY_OF_MONTH, 1);//日期增加一天
//如果+1后,到了星期的第一天,表明这是一个星期六(按中国的习惯),那么要另起一行
if (d.get(Calendar.DAY_OF_WEEK)==firstDayOfWeek)
System.out.println();
}while(d.get(Calendar.MONTH)==month);//如果加一天之后,还在本月之内,继续循环
}
}