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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有这么一个问题,输入某一年的某一天,输出这一天是这一年的几月几日,能怎么实现?想好几天也没想明白~~~

评分

参与人数 1黑马币 +1 收起 理由
zhangqi0730 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 duanqichao 于 2016-11-18 01:38 编辑

这原来本来是个C语言的题目,所以按照C的思路折腾了一晚上,基本是这样,不知道大家还有其他的意见没?
[Java] 纯文本查看 复制代码
package com.example.day1;

import java.util.Scanner;

class Temp {
        private static int[] month = {1,2,3,4,5,6,7,8,9,10,11,12} ;
        private static int[] days1 = {31,29,31,30,31,30,31,31,30,31,30,31};
        private static int[] days2 = {31,28,31,30,31,30,31,31,30,31,30,31};
        private static Scanner sc = new Scanner(System.in) ;
        public static void main(String[] args) {
                 System.out.println("请输入年份");
                 int year =  sc.nextInt();
                 System.out.println("请输入天数");
                 int day = sc.nextInt() ;
                 boolean b = isLeap(year);
                 int realyMonth  = whatMonth(day, b);
                 int realyDay = whatDay(day, realyMonth, b);
                 System.out.println(realyMonth);
                 System.out.println(realyDay);
                 System.out.println("这一天是"+year+"年"+realyMonth+"月" + realyDay +"日");
                
                
                
        }
        
       
         // 判断是否是闰年
       
        private static   boolean  isLeap (int year  ){
                if( year % 4 == 0 || year % 400 ==0 ){
                        return true ;
                }else{
                        return false ;
                }
        }
        
        // 判断输入的天数在哪个月份
         
        private static  int  whatMonth(int day ,boolean isLeap) {
          int temp = 0  ;
      if (isLeap){
             if (day >0 && day <=31){
                     temp = month[0];
             }else if (day >= 32 & day <= 60){
                     temp = month[1];
             }else if (day >= 61 & day <= 91){
                     temp = month[2];
             }else if (day >= 92 & day <= 121){
                     temp = month[3];
             }else if (day >= 122 & day <= 152){
                     temp = month[4];
             }else if (day >= 153 & day <= 182){
                     temp = month[5];
             }else if (day >= 183 & day <= 213){
                     temp = month[6];
             }else if (day >= 214 & day <= 244){
                     temp = month[7];
             }else if (day >= 245 & day <= 274){
                     temp = month[8];
             }else if (day >= 275 & day <= 305){
                     temp = month[9];
             }else if (day >= 306 & day <= 335){
                     temp = month[10];
             }else {
                     temp = month[11]; 
             }  
              
      }else {
              if (day >0 && day <=31){
                      temp = month[0];
              }else if (day >= 32 & day <= 59){
                      temp = month[1];
              }else if (day >= 60 & day <= 90){
                      temp = month[2];
              }else if (day >= 91 & day <= 120){
                      temp = month[3];
              }else if (day >= 121 & day <= 151){
                      temp = month[4];
              }else if (day >= 152 & day <= 181){
                      temp = month[5];
              }else if (day >= 182 & day <= 212){
                      temp = month[6];
              }else if (day >= 213 & day <= 243){
                      temp = month[7];
              }else if (day >= 244 & day <= 273){
                      temp = month[8];
              }else if (day >= 274 & day <= 304){
                      temp = month[9];
              }else if (day > 305 & day <= 334){
                      temp = month[10];
              }else {
                      temp = month[11]; 
              }  
              
      }
      return temp ;
        }
        
        //判断所在的月份里的第多少天
        private static  int  whatDay(int day,int mon,boolean isleap){
                //计算截止上月累计天数
                int sum = 0 ;
                if(isleap){
                        for ( int i = 0 ; i < mon-1 ; i++){
                                sum +=  days1[i];                                
                        }                        
                }else{
                        for ( int i = 0 ; i < mon-1 ; i++){
                                sum +=  days2[i];
                        }
                }
                //用实际多少天减去上月累计天数就是本月实际日期
                int realDay = day - sum ;        
                return realDay ;
        }
        
        
}
回复 使用道具 举报
思路很清晰,就是感觉代码不够简单,期待新的解题思路
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
你的太复杂了,太长了,看我的
public static void main(String[] args) {
                //date(2015,12,30);
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入年份:");
                int year=sc.nextInt();
                System.out.println("请输入月份:");
                int month=sc.nextInt();
                System.out.println("请输入号数:");
                int day=sc.nextInt();
               
                date(year,month,day);
        }
       
        private static void date(int year, int month, int day) {
                int sum = 0;
                int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
                if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
                        arr[1] = 29;
                        if (month == 1) {
                                sum = day;
                        } else {
                                for (int i = 0; i < month - 1; i++) {
                                        sum += arr[i];
                                }
                                sum = sum + day;
                        }
                } else {
                        if (month == 1) {
                                sum = day;
                        } else {
                                for (int i = 0; i < month - 1; i++) {
                                        sum += arr[i];
                                }
                                sum = sum + day;
                        }
                }
                System.out.println("这是本年的第" + sum + "天");
        }
回复 使用道具 举报
或者 也可以用 switch 每一个case对应每一个月天数 二月判断闰年平年
回复 使用道具 举报
a1029612664 发表于 2016-11-19 22:33
你的太复杂了,太长了,看我的
public static void main(String[] args) {
                //date(2015,12,30);

不是要计算某年某月某日是这一年的多少天,是反过来,已知某年的多少天,判断这一天是这一年的几月几日。
回复 使用道具 举报
the_one 初级黑马 2016-11-27 17:01:45
7#
int year = 2015;                 String s = year+"年01月01日";                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");                 long crrq = 100;                                  Date d1 = sdf.parse(s);                 long time = d1.getTime();                 Date d2 = new Date(time+crrq*24*60*60*1000);                 System.out.println(sdf.format(d2));
回复 使用道具 举报
the_one 初级黑马 2016-11-27 17:03:01
8#
int year = 2015;
                String s = year+"年01月01日";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
                long crrq = 100;
               
                Date d1 = sdf.parse(s);
                long time = d1.getTime();
                Date d2 = new Date(time+crrq*24*60*60*1000);
                System.out.println(sdf.format(d2));


这个应该能满足你!~~~
回复 使用道具 举报
duanqichao 发表于 2016-11-18 01:35
这原来本来是个C语言的题目,所以按照C的思路折腾了一晚上,基本是这样,不知道大家还有其他的意见没?
[mw ...

哥们,这个是c语言的思想,感觉很麻烦,应该可以用simpledataformat来做吧
回复 使用道具 举报
蒙奇D路飞 发表于 2016-11-29 20:38
哥们,这个是c语言的思想,感觉很麻烦,应该可以用simpledataformat来做吧

嗯嗯,就是按照c来的。故意写成这样,方便改成c版本的。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
duanqichao 发表于 2016-11-30 08:28
嗯嗯,就是按照c来的。故意写成这样,方便改成c版本的。

你学c多久了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马