/** *written by maozhen * **/ package y2kmz.com.rili20070706;//创建包 import javax.swing.JOptionPane;//引用javax.swing这个包里的JOptionPane类 public class excercise_1_5 {定义一个exercise_1_5类 public int InputNum(String ss)//声明一个公共的整型方法名InputNum,并且返回String类型ss { String num_1 = JOptionPane.showInputDialog(ss);//输入数字//弹出输入框,输入值为字符串num_1 /* * 按位判断是否是数字 */ /***********************************************************/ int Numlength;//定义定义一个整型成员变量Numlength Numlength=num_1.length();//使用String下的方法.length来获取num_1的长度并赋给Numlength for(int i=0;i<Numlength;i++)//适用for循环遍历num_1 { if(!((num_1.charAt(i)>='0'&&num_1.charAt(i)<='9')||num_1.charAt(i)=='-'))//if语句,调用charAt()方法判断数字范围 { JOptionPane.showMessageDialog(new JOptionPane(), "您输入的不是数字!");//弹出输出框 System.exit(0);//程序运行到这里,正常结束 } }//主要是根据AscII码表来判断数字 /****************************************************************/ int num_2 = Integer.parseInt(num_1);//返回输入的数字进行运算//将String类型的num_1转换成int类型的num_2 return num_2;//返回num_2 } //----------/-/-/--/-/-/-/-/--/-/-/-/-/--/-/--/-/-/-/---/-/--/-/ public int IsRun(int input){//声明一个公共的整型方法名IsRun,并返回整型值input int flag=0;//定义整型成员变量并赋值0 if((input%4)==0){//用if语句选择,假如input除以4的时候为0 flag = 1;//则flag赋值1 if((input%100)==0){//继续判断,用input除以100的时候为0 flag = 0;//则flag赋值0 } if((input%400)==0){//继续判断,用input除以400为0 flag = 1;//则flag值为1 } } return flag; //返回flag的值 }//这个程序是利用闰年的性质来判断输入的年份是否为闰年 // ----------/-/-/--/-/-/-/-/--/-/-/-/-/--/-/--/-/-/-/---/-/--/-/ public int monthDays(int month, int run2){//声明一个公共的整型方法名monthDays,并返回整型month和runs??这个地方我觉得我写错了,不太明白 int days=0;//定义整型成员变量days为0 switch(month){//指定switch语句表达式为变量month case 1://定义case语句中的常量为1 case 3: case 5: case 7: case 8: case 10: case 12://同上 days = 31;//给days赋值为31 break;//跳出 case 4://............. case 6: case 9: case 11://............ days = 30;//给days赋值为30 break;//跳出 case 2://定义case语句中的常量为2 { if(run2==1) //分析闰年情况,如果上面反馈的run2的值为1的时候(闰年)??话说我没找到run2在哪里 days = 29; //则给days赋值为29 else //if-else语句 days = 28;//否则给days赋值为28 } break;//跳出 } return days; //返回days的值 } /** * ============主程序体========================主程序体============ * @param args * ============主程序体========================主程序体============ * ============主程序体========================主程序体============ * ============主程序体========================主程序体============ * ============主程序体========================主程序体============ */ public static void main(String[] args){//主方法 /* * ============设定变量部分============ */ int inDate[] = {2000,1,6};//定义整型数组inDate并赋值2000,1,6 int i=0,j=0;//循环用 int counter=0;//累加用 int run=0; int sumDate=0; int tempadd=0; int weekNote=0; int dayNotes=0; String dateString = ""; /* * ============调用类的部分============ */ excercise_1_5 Data = new excercise_1_5();//这里是创建新的对象,还是调用类呢??? /* * ============程序体开始================== */ //-------------输入日期---------------- inDate[0] = Data.InputNum("输入年");//显示输入年的输入框,给数组赋第一个值年份//??这个是输入的固定写法么? inDate[1] = Data.InputNum("输入月:");//显示输入框,同上,给数组赋第二个值月份 if(inDate[1]<1||inDate[1]>12)//if语句,用来判断月份是否在1月到12月这个区间 { JOptionPane.showMessageDialog(new JOptionPane(), "您输入的月份不对!");//弹出框,如果不符合if语句,输出"你输入的月份不对" System.exit(0);//程序运行到这里结束 } //----------------------------- // --------------运算--------------- if(inDate[0]>=2000){//如果数组的第一个数字(即年份)大于2000则进入for循环 //加年 for(i=2000;i<inDate[0];i++){//for循环....?这个需要解释一下 run = Data.IsRun(i);//调用IsRun方法,并将i值返回运算 if(run==1){//如果run==1,即闰年 sumDate = sumDate + 366;//sumDate=0+366=366,闰年一年的天数 } else{//if-else sumDate = sumDate + 365;//sumDate=0+365=365,平年一年的天数 } }//end for //加月份 run = Data.IsRun(inDate[0]);//调用IsRun方法,并返回年份进行运算,得出的结果赋给run???这里我想问赋给run的值是啥? for(i=1;i<inDate[1];i++){//for循环, tempadd = Data.monthDays(i, run); sumDate = sumDate + tempadd; }//end for weekNote = (6+(sumDate%7))%7; }//end if else { // 减年 for(i=1999;i>inDate[0];i--){ run = Data.IsRun(i); if(run==1){ sumDate = sumDate + 366; } else{ sumDate = sumDate + 365; } }//end for //减月份 run = Data.IsRun(inDate[0]); for(i=12;i>=inDate[1];i--){ tempadd = Data.monthDays(i, run); sumDate = sumDate + tempadd; }//end for weekNote = (6-(sumDate%7))%7; }//end else run = Data.IsRun(inDate[0]); tempadd = Data.monthDays(inDate[1], run); //tempadd 本月天数,weekNote 首日周几 /* * =======控制台输出======= */ System.out.print(" "+inDate[0]+"年"+inDate[1]+"月"+"/n"); dateString = dateString+" "+inDate[0]+"年"+inDate[1]+"月"+"/n"; System.out.print(" Sun Mon Tus Wed Thu Fri Sat /n"); dateString = dateString+" Sun Mon Tus Wed Thu Fri Sat /n"; System.out.print("=======================================/n"); dateString = dateString+"=======================================/n"; while(dayNotes<tempadd){ counter++; dayNotes = counter-weekNote; if(dayNotes<=0){ System.out.print(" "); dateString = dateString+" "; } else{ if(dayNotes>9){ System.out.print(" "+dayNotes); dateString = dateString+" "+dayNotes; } else{ System.out.print(" "+dayNotes); dateString = dateString+" "+dayNotes; } } if(((counter)%7)==0) { System.out.print("/n"); dateString = dateString+"/n"; } } /* * ========对话框输出========== */ JOptionPane.showMessageDialog(new JOptionPane(), dateString); // System.out.print(dateString); // System.out.print("/n days= "+tempadd+"/n"); // System.out.print("week= "+weekNote+"/n"); // System.out.print(inDate[0]); // System.out.print(inDate[1]); // System.out.print(inDate[2]); // String abc[]=new String[8]; // abc[0]="123456789"; // abc[0].getChars(1, 1, asd, 1); // System.out.print(asd); } }