黑马程序员技术交流社区
标题:
写的万年历,有点小问题!
[打印本页]
作者:
田建
时间:
2012-6-29 10:05
标题:
写的万年历,有点小问题!
本帖最后由 田建 于 2012-6-29 13:04 编辑
/*
*目的:若用户输入年和月,则打印出当月的日历
* 若用户只是输入年,则打印出整年的日历
*问题所在:只输入年的时候打印不出来,不知为何,求解!
**/
import java.util.*;
import java.io.*;
class CalendarTest
{
static int i;
static String[] str={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
public static void getCalendar(int year,int month)
{
GregorianCalendar gre=new GregorianCalendar(year,month-1,1);
int days=gre.getActualMaximum(Calendar.DAY_OF_MONTH);
int startDay=gre.get(Calendar.DAY_OF_WEEK)-1;
for(int j=0;j<str.length;j++)
{
System.out.print("\t"+str[j]);
}
System.out.println();
for(i=0;i<startDay;i++)
{
System.out.print("\t");
}
for(int day=1;day<=days;day++)
{
System.out.print("\t"+day);
i++;
if(i==7)
{
System.out.println();
i=0;
}
}
}
public static void getCalendar(int year)
{
for(int i=1;i<=12;i++)
{
getCalendar(year,i);
System.out.println();
}
}
public static void main(String[] args)throws Exception
{
while(true)
{
System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
if(str.matches("[0-9]"))
{
int year=Integer.parseInt(str);
getCalendar(year);
System.out.println();
}
else
{
String[] arr=str.split(",");
getCalendar(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]));
System.out.println();
}
}
}
}
复制代码
作者:
李天甲
时间:
2012-6-29 10:17
本帖最后由 李天甲 于 2012-6-29 10:20 编辑
几个问题,请参见注释
/*
*目的:若用户输入年和月,则打印出当月的日历
* 若用户只是输入年,则打印出整年的日历
*问题所在:只输入年的时候打印不出来,不知为何,求解!
**/
import java.util.*;
import java.io.*;
class CalendarTest
{
static int i;
static String[] str = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
public static void getCalendar(int year, int month)
{
GregorianCalendar gre = new GregorianCalendar(year, month - 1, 1);
int days = gre.getActualMaximum(Calendar.DAY_OF_MONTH);
int startDay = gre.get(Calendar.DAY_OF_WEEK) - 1;
for (int j = 0; j < str.length; j++)
{
System.out.print("\t" + str[j]);
}
System.out.println();
for (i = 0; i < startDay; i++)
{
System.out.print("\t");
}
for (int day = 1; day <= days; day++)
{
System.out.print("\t" + day);
i++;
if (i == 7)
{
System.out.println();
i = 0;
}
}
}
public static void getCalendar(int year)
{
for (int i = 1; i <= 12; i++)
{
getCalendar(year, i);
System.out.println();
}
}
public static void main(String[] args) throws Exception
{
while (true)
{
System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
String str1 = br.readLine();
if (str1.matches("[0-9]")) //判断全是数子,你这里只判断了第一个,应该是[0-9]+ 或者/d+
{
int year = Integer.parseInt(str1);
getCalendar(year);
System.out.println();
}
else
{
String[] arr = str1.split(",");
getCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])); //因为上面错了,所以下面就空指针了呵呵
System.out.println();
}
}
}
}
复制代码
作者:
田建
时间:
2012-6-29 10:43
恩恩,总的来说还是正则表达式不熟练:针对这个问题,我把代码又改了一下,现在的代码如下,大家有兴趣可以加个图形界面
import java.util.*;
import java.io.*;
class CalendarTest
{
static int i;
static String[] str={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
public static void getCalendar(int year,int month)
{
GregorianCalendar gre=new GregorianCalendar(year,month-1,1);
int days=gre.getActualMaximum(Calendar.DAY_OF_MONTH);
int startDay=gre.get(Calendar.DAY_OF_WEEK)-1;
for(int j=0;j<str.length;j++)
{
System.out.print("\t"+str[j]);
}
System.out.println();
for(i=0;i<startDay;i++)
{
System.out.print("\t");
}
for(int day=1;day<=days;day++)
{
System.out.print("\t"+day);
i++;
if(i==7)
{
System.out.println();
i=0;
}
}
}
public static void getCalendar(int year)
{
for(int i=1;i<=12;i++)
{
getCalendar(year,i);
System.out.println();
}
}
public static void main(String[] args)throws Exception
{
while(true)
{
System.out.println("请输入要查看的年份和月份,格式为:****,**或者****");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
if(str.matches("[0-9]+"))
{
int year=Integer.parseInt(str);
if(year<=0)
{
System.out.println("您输入的年份有误~!");
}
else
{
getCalendar(year);
System.out.println();
}
}
else if(str.matches("\\d+"+","+"\\d{1,3}"))
{
String[] arr=str.split(",");
if(Integer.parseInt(arr[0])<=0)
{
System.out.println("您输入的年份有误!");
}
else if((Integer.parseInt(arr[1])>12)||(Integer.parseInt(arr[0])<=0))
{
System.out.println("您输入的月份有误~!");
}
else
{
getCalendar(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]));
System.out.println();
}
}
else
{
System.out.println("您输入的格式有误!");
}
}
}
}
复制代码
作者:
李天甲
时间:
2012-6-29 10:47
其实字符终端挺好看的,排版挺费工夫...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2