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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄒんeゞSeven 中级黑马   /  2013-11-15 21:05  /  1332 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目: 输入一个日期,根据这个日期排列出其所在本周的日期.如有更好的方法,欢迎讨论.
游客,如果您要查看本帖隐藏内容请回复



QQ截图20131115205842.png (28.93 KB, 下载次数: 14)

输出结果

输出结果

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

8 个回复

倒序浏览
看看  隐藏的什么?
回复 使用道具 举报
:handshake
回复 使用道具 举报
看看好玩不
回复 使用道具 举报
知识看看那
回复 使用道具 举报
楼主的方法思路挺好,调用了Java中日历类的方法,计算输出也挺准确。
但是存在一个漏洞:那就是月份、日期没有限制,比如输入13月也可以运行,56日也能计算。
楼主在存储日期前可先进行判定,看输入的日期是否合法,也可声明异常让用户输入正确的日期。
而且如果输入日期是在月初或者月末返回的七天中日期会越界,甚至出现负数日期。
这方面需要很多计算,每个月天数不同,例如遇到2月份还要计算是否是闰年。
我还没有接触过日历中的方法,对其功能不了解,不知道它能否直接给于年月日的计算来返回正确的日期值。以上仅为个人看法,希望楼主加油,早日解决。
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
看看是什么。
回复 使用道具 举报
回复可见
回复 使用道具 举报
本帖最后由 ㄒんeゞSeven 于 2013-11-16 23:13 编辑
天ya~_琼楼 发表于 2013-11-15 23:43
楼主的方法思路挺好,调用了Java中日历类的方法,计算输出也挺准确。
但是存在一个漏洞:那就是月份、日期 ...

万分感谢! 我已经把代码修改了.
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");
                }
            }
        }
    }
}


我也是初学者, 想到这里已经是极限了, 算法确实有点复杂, 期待简化或更好的算法.

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马