A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田建 高级黑马   /  2012-6-29 10:05  /  1445 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田建 于 2012-6-29 13:04 编辑
  1. /*
  2. *目的:若用户输入年和月,则打印出当月的日历
  3. *                若用户只是输入年,则打印出整年的日历
  4. *问题所在:只输入年的时候打印不出来,不知为何,求解!
  5. **/
  6. import java.util.*;
  7. import java.io.*;
  8. class CalendarTest
  9. {
  10.         static int i;
  11.         static String[] str={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  12.         public static void getCalendar(int year,int month)
  13.         {
  14.                 GregorianCalendar gre=new GregorianCalendar(year,month-1,1);
  15.                 int days=gre.getActualMaximum(Calendar.DAY_OF_MONTH);
  16.                 int startDay=gre.get(Calendar.DAY_OF_WEEK)-1;
  17.                 for(int j=0;j<str.length;j++)
  18.                 {
  19.                         System.out.print("\t"+str[j]);
  20.                 }
  21.                 System.out.println();
  22.                 for(i=0;i<startDay;i++)
  23.                 {
  24.                         System.out.print("\t");
  25.                 }

  26.                 for(int day=1;day<=days;day++)
  27.                 {

  28.                         System.out.print("\t"+day);
  29.                         i++;
  30.                         if(i==7)
  31.                         {
  32.                                 System.out.println();
  33.                                 i=0;
  34.                         }
  35.                 }
  36.         }
  37.         public static void getCalendar(int year)
  38.         {
  39.                 for(int i=1;i<=12;i++)
  40.                 {
  41.                         getCalendar(year,i);
  42.                         System.out.println();
  43.                 }
  44.         }
  45.         public static void main(String[] args)throws Exception
  46.         {
  47.                 while(true)
  48.                 {
  49.                         
  50.                                 System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
  51.                                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  52.                                 String str=br.readLine();
  53.                                 if(str.matches("[0-9]"))
  54.                                 {
  55.                                         int year=Integer.parseInt(str);
  56.                                         getCalendar(year);
  57.                                         System.out.println();
  58.                                 }
  59.                                 else
  60.                                 {
  61.                                         String[] arr=str.split(",");
  62.                                         getCalendar(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]));
  63.                                         System.out.println();
  64.                                 }
  65.                                 
  66.                         }
  67.                         

  68.                 }
  69.                
  70.         }
复制代码

3 个回复

倒序浏览
本帖最后由 李天甲 于 2012-6-29 10:20 编辑

几个问题,请参见注释
  1. /*
  2. *目的:若用户输入年和月,则打印出当月的日历
  3. *                若用户只是输入年,则打印出整年的日历
  4. *问题所在:只输入年的时候打印不出来,不知为何,求解!
  5. **/
  6. import java.util.*;
  7. import java.io.*;
  8. class CalendarTest
  9. {
  10.         static int i;
  11.         static String[] str = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
  12.         public static void getCalendar(int year, int month)
  13.         {
  14.                 GregorianCalendar gre = new GregorianCalendar(year, month - 1, 1);
  15.                 int days = gre.getActualMaximum(Calendar.DAY_OF_MONTH);
  16.                 int startDay = gre.get(Calendar.DAY_OF_WEEK) - 1;
  17.                 for (int j = 0; j < str.length; j++)
  18.                 {
  19.                         System.out.print("\t" + str[j]);
  20.                 }
  21.                 System.out.println();
  22.                 for (i = 0; i < startDay; i++)
  23.                 {
  24.                         System.out.print("\t");
  25.                 }
  26.                 for (int day = 1; day <= days; day++)
  27.                 {
  28.                         System.out.print("\t" + day);
  29.                         i++;
  30.                         if (i == 7)
  31.                         {
  32.                                 System.out.println();
  33.                                 i = 0;
  34.                         }
  35.                 }
  36.         }
  37.         public static void getCalendar(int year)
  38.         {
  39.                 for (int i = 1; i <= 12; i++)
  40.                 {
  41.                         getCalendar(year, i);
  42.                         System.out.println();
  43.                 }
  44.         }
  45.         public static void main(String[] args) throws Exception
  46.         {
  47.                 while (true)
  48.                 {
  49.                         System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
  50.                         BufferedReader br = new BufferedReader(new InputStreamReader(
  51.                                         System.in));
  52.                         String str1 = br.readLine();  
  53.           if (str1.matches("[0-9]"))    //判断全是数子,你这里只判断了第一个,应该是[0-9]+ 或者/d+
  54.           {
  55.                                 int year = Integer.parseInt(str1);
  56.                                 getCalendar(year);
  57.                                 System.out.println();
  58.                         }
  59.                         else
  60.                         {
  61.                                 String[] arr = str1.split(",");
  62.                                 getCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]));   //因为上面错了,所以下面就空指针了呵呵
  63.                                 System.out.println();
  64.                         }
  65.                 }
  66.         }
  67. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
恩恩,总的来说还是正则表达式不熟练:针对这个问题,我把代码又改了一下,现在的代码如下,大家有兴趣可以加个图形界面
  1. import java.util.*;
  2. import java.io.*;
  3. class CalendarTest
  4. {
  5.         static int i;
  6.         static String[] str={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  7.         public static void getCalendar(int year,int month)
  8.         {
  9.                 GregorianCalendar gre=new GregorianCalendar(year,month-1,1);
  10.                 int days=gre.getActualMaximum(Calendar.DAY_OF_MONTH);
  11.                 int startDay=gre.get(Calendar.DAY_OF_WEEK)-1;
  12.                 for(int j=0;j<str.length;j++)
  13.                 {
  14.                         System.out.print("\t"+str[j]);
  15.                 }
  16.                 System.out.println();
  17.                 for(i=0;i<startDay;i++)
  18.                 {
  19.                         System.out.print("\t");
  20.                 }

  21.                 for(int day=1;day<=days;day++)
  22.                 {

  23.                         System.out.print("\t"+day);
  24.                         i++;
  25.                         if(i==7)
  26.                         {
  27.                                 System.out.println();
  28.                                 i=0;
  29.                         }
  30.                 }
  31.         }
  32.         public static void getCalendar(int year)
  33.         {
  34.                 for(int i=1;i<=12;i++)
  35.                 {
  36.                         getCalendar(year,i);
  37.                         System.out.println();
  38.                 }
  39.         }
  40.         public static void main(String[] args)throws Exception
  41.         {
  42.                 while(true)
  43.                 {       
  44.                                 System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
  45.                                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  46.                                 String str=br.readLine();
  47.                                 if(str.matches("[0-9]+"))
  48.                                 {
  49.                                         int year=Integer.parseInt(str);
  50.                                         if(year<=0)
  51.                                         {
  52.                                                 System.out.println("您输入的年份有误~!");
  53.                                         }
  54.                                         else
  55.                                         {
  56.                                                 getCalendar(year);
  57.                                                 System.out.println();
  58.                                         }
  59.                                        
  60.                                 }
  61.                                 else if(str.matches("\\d+"+","+"\\d{1,3}"))
  62.                                 {
  63.                                         String[] arr=str.split(",");
  64.                                         if(Integer.parseInt(arr[0])<=0)
  65.                                         {
  66.                                                 System.out.println("您输入的年份有误!");
  67.                                                
  68.                                         }
  69.                                         else if((Integer.parseInt(arr[1])>12)||(Integer.parseInt(arr[0])<=0))
  70.                                         {
  71.                                                 System.out.println("您输入的月份有误~!");
  72.                                         }
  73.                                         else
  74.                                         {
  75.                                                 getCalendar(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]));
  76.                                                 System.out.println();
  77.                                         }
  78.                                        
  79.                                 }
  80.                                 else
  81.                                 {
  82.                                         System.out.println("您输入的格式有误!");
  83.                                 }
  84.                                
  85.                         }
  86.                        
  87.                 }
  88.                
  89.         }

复制代码
回复 使用道具 举报
其实字符终端挺好看的,排版挺费工夫...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马