本帖最后由 ㄒんeゞSeven 于 2013-11-16 23:13 编辑
万分感谢! 我已经把代码修改了.
1,输入日期是否合法的问题,就如你所说,用异常很容易就能处理了, 这里就不做修改了
2,针对输出日期出现负数的问题,我修改的代码如下.
import java.util.Scanner;
import java.util.Calendar;
/*
输入一个日期,根据这个日期排列出其所在本周的日期.
*/
public class CalendarTest1{
public static void main(String[] args){
int infoDay;//输入日
int infoMonth; //输入月
int infoYear;//输入年
int week;//获取星期
int infoDayC; //返回输入日期所在月的前一个月的天数
Calendar day = Calendar.getInstance();//创建日历对象
Calendar c = Calendar.getInstance(); //创建输入日期所在月的前一个月的日历对象
Scanner input = new Scanner(System.in);
//获取日期
System.out.print("输入年份: ");
infoYear = input.nextInt();
System.out.print("输入月份: ");
infoMonth = input.nextInt();
System.out.print("输入日期: ");
infoDay = input.nextInt();
day.set(infoYear, infoMonth-1, infoDay);//向日历对象储存获取到的日期
week = day.get(Calendar.DAY_OF_WEEK)-1;//返回输入日期的星期数
/*
计算排列,输入日期所在本周的日期
*/
infoDay = infoDay-week;
c.set(infoYear, infoMonth-2, 1);//储存输入日期所在月的前一个月的开始日期.
//如果输入的星期数是星期7的情况
if(week == 0){
infoDay = infoDay - 7;
}
//记录输入日期所在星期一的日期是前一个月的
infoDayC = c.getActualMaximum(Calendar.DAY_OF_MONTH)+infoDay;
int temp =0;//用于输出 客户输入日期所在月的第一天
for(; week-7 <= 7; week++){
if((week-7)>0){
//如果infoDay<1 说明出现日期所在星期跨月的情况
if(infoDay < 1){
//处理跨月后日期错误
if(infoDayC > c.getActualMaximum(Calendar.DATE)){
temp++;
System.out.println(infoYear + "年" + infoMonth + "月" + temp + "日: 星期" + (week-7) + "\t");
}else{
infoDayC++;
System.out.println(infoYear + "年" + (infoMonth-1) + "月" +infoDayC + "日: 星期" + (week-7) + "\t");
}
}else{
infoDay++;
System.out.println(infoYear + "年" + infoMonth + "月" +infoDay + "日: 星期" + (week-7) + "\t");
}
}
}
}
}
我也是初学者, 想到这里已经是极限了, 算法确实有点复杂, 期待简化或更好的算法.
|