8月8日 完成listing 4-1的编译

来源:互联网 发布:淘宝沙特代购手表真假 编辑:程序博客网 时间:2024/06/04 18:25

学习进展到了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);//如果加一天之后,还在本月之内,继续循环



}

}

原创粉丝点击