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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 潘才新 于 2013-10-1 00:20 编辑

版主最近很忙,我也在培训,望所以你们能见谅!
不废话啦!题目内容部写那么多了,就那么一点。3分拿回家
---------------------------------------------------------------------------------
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:   以4月15日为例,应该先把前三个月的加起来,然后再加上15天即本年的第几天,   特殊情况,闰年且输入月份大于3时需考虑多加一天。

2.提示闰年的算法:
   被4整除但不能被100整除为闰年
   被400整除的为闰年

----------------------------------------------------------------------------------

13 个回复

倒序浏览
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;


  6. public class DateTest {

  7. //定义用于存年月日的全部变量
  8. public static int year;
  9. public static int month;
  10. public static int day;

  11. //是否为闰年
  12. public static boolean flag = false;

  13. //每个月最大的天数(闰年)
  14. public static int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};

  15. public static void main(String[] args) throws IOException{
  16. //读取流,用来入去控制台的输入
  17. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  18. String date = "";
  19. //循环读取日期字符串
  20. do{
  21. System.out.print("请输入日期(格式为:*年*月*日)(over为结束。):");
  22. date = br.readLine();
  23. //当读到”over“结束
  24. if("over".equals(date)){
  25. break;
  26. }
  27. //检查输入格式是否有误
  28. if(!checkInput(date)){
  29. System.out.println("输入格式错误,请检查!");
  30. }else{
  31. //无误,打印结果(调用getResult()方法)
  32. System.out.println("为"+year+"年的第"+getResult()+"天");
  33. }
  34. }while(true);
  35. }

  36. /**
  37. * 检查输入的内容格式是否正确
  38. * @param date
  39. * @return
  40. */
  41. public static boolean checkInput(String date) {

  42. //获取一个指定正则的规则
  43. Pattern p = Pattern.compile("\\d{4}年\\d{1,2}月\\d{1,2}日");
  44. //得到指定字符串的匹配器
  45. Matcher m = p.matcher(date);

  46. //检查输入格式是否满足要求
  47. if(!m.matches()){
  48. return false;
  49. }
  50. //得到对应的索引
  51. int year_index = date.indexOf('年');
  52. int month_index = date.indexOf('月');
  53. int day_index = date.indexOf('日');

  54. //获得年,月,日
  55. year = Integer.parseInt(date.substring(0, year_index));
  56. month = Integer.parseInt(date.substring(year_index+1, month_index));
  57. day = Integer.parseInt(date.substring(month_index+1, day_index));

  58. //检查年月日的取值范围是否正确
  59. return checkDate();
  60. }

  61. /**
  62. * 检查日期的大小有没有越界
  63. * @return
  64. */
  65. public static boolean checkDate(){

  66. //检查年的范围
  67. if(year <1970){
  68. return false;
  69. }

  70. //检查是否为闰年
  71. if((year%4==0 && year%100!=0 ) || (year % 400 == 0)){
  72. flag = true;
  73. }
  74. //检查月的范围
  75. if(month<=0||month > 12){
  76. return false;
  77. }

  78. //如果是闰年,在判断是否为2月份
  79. if(flag){
  80. if(month == 2){
  81. return day <=29 &&day>0;
  82. }else{
  83. //不为2月份,只需对照数组的值进行比较
  84. return day<=days[month-1]&& day>0;
  85. }
  86. }else{
  87. //不为2月份,只需对照数组的值进行比较
  88. return day<=days[month-1]&& day>0;
  89. }
  90. }


  91. //获取一年中的第几天
  92. public static int getResult(){
  93. int result = getSum(month,day);
  94. //如果是闰年,并且是大于2月份的就再加1
  95. if(flag && month>2){
  96. result+=1;
  97. }
  98. return result;
  99. }
  100. //非闰年的正确求值
  101. public static int getSum(int month,int day){
  102. int sum = 0;
  103. //循环,将数组的数值累加求值
  104. for(int i=0;i<month-1;i++){
  105. sum += days[i];
  106. }
  107. return sum+day;
  108. }
  109. }
复制代码


求天数,不是用现有的Calendar获取其中的DAY_OF_YEAR的就可以得到吗。上面代码是按照楼主的说的意思写的。

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 注释不错。一目了然

查看全部评分

回复 使用道具 举报
  1. package cn.itcast.day1;

  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4. import java.util.regex.Pattern;


  5. public class Test1 {
  6.         private final static int a[]={0,0,31,59,90,120,151,181,212,243,273,304,334};
  7.     public static void main(String[] args) throws Exception{
  8.                while(true){
  9.                        System.out.print("请输入你要查询的日期,格式为:xxxx-xx-xx,over结束     ");
  10.                        Scanner scanner = new Scanner(System.in);
  11.                        String[] s = scanner.next().split("-");
  12.                        if("over".equals(s[0])) break;
  13.                        int year = Integer.parseInt(s[0]);
  14.                        int month = Integer.parseInt(s[1]);
  15.                        int day = Integer.parseInt(s[2]);
  16.                        Boolean flag = true;
  17.                        switch (month) {
  18.                                         case 1:
  19.                                         case 3:
  20.                                         case 5:
  21.                                         case 7:
  22.                                         case 8:
  23.                                         case 10:
  24.                                         case 12:
  25.                                                 if(day>31 || day <1) {
  26.                                                         flag = false;
  27.                                                         System.out.println("输入内容不合法,day的范围1-31");
  28.                                                 }
  29.                                                 break;
  30.                                         case 4:
  31.                                         case 6:
  32.                                         case 9:
  33.                                         case 11:
  34.                                                 if(day>30 || day <1 )
  35.                                                 {
  36.                                                         flag = false;
  37.                                                         System.out.println("输入内容不合法,day的范围1-30");
  38.                                                 }
  39.                                                 break;
  40.                                         default:
  41.                                                 if((year%4==0 && year%100!=0 ) || (year % 400 == 0 )){
  42.                                                         if(day>29 || day <1 )
  43.                                                         {
  44.                                                                 flag = false;
  45.                                                                 System.out.println("今年为闰年,day的范围1-29");
  46.                                                         }
  47.                                                 }else{
  48.                                                         if(day>28 || day <1 ) {
  49.                                                                 flag = false;
  50.                                                                 System.out.println("今年非闰年,day的范围1-28");
  51.                                                         }
  52.                                                 }       
  53.                                                 break;
  54.                                         }
  55.                        if(flag){
  56.                                System.out.println(getDayth(year,month,day));                              
  57.                        }else{
  58.                                flag = true;
  59.                                System.out.println("输入内容不合法,请按照格式要求填写");
  60.                        }
  61.                }
  62.        }

  63.         private static int getDayth(int year, int month, int day) {
  64.                 int dayth = a[month] + day;
  65.                 if( month >2 && ((year%4==0 && year%100!=0 ) || (year % 400 == 0 )) )
  66.                         return dayth+1;
  67.                 return dayth;
  68.         }
  69. }

复制代码

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 不错。用到对应的知识点

查看全部评分

回复 使用道具 举报
本帖最后由 黑色海 于 2013-10-1 10:30 编辑

.net学员过来凑热闹

  1. <P>        /// <summary>
  2.         /// 思路:1判断输入是否正确,格式,月份
  3.         ///       2.判断平年和闰年
  4.         ///       3.判断对应月份的日数是否正确
  5.         ///       4.将月份作为循环变量的限定条件,让其天数累加再加上最后的日数
  6.         /// </summary>
  7.         /// <param name="args"></param>
  8.         static void Main(string[] args)
  9.         {
  10.             //定义可能用到的变量           
  11.             int year=0, month=0, day=0;
  12.             int resultdays=0;</P>
  13. <P>              int[] pdays = {31,28,31,30,31,30,31,31,30,31,30,31 };          //平年每月天数
  14.              int[] rdays = {31,29,31,30,31,30,31,31,30,31,30,31 };         //闰年每月天数
  15.              string[] array=null;
  16.             Console.WriteLine("请您输入待判断日期,用“.”做年月日之间的间隔");
  17.             string datetime = Console.ReadLine();
  18.             try
  19.             {
  20.                 array = datetime.Split('.');
  21.             }
  22.             catch
  23.             {
  24.                 Console.WriteLine("您输入的日期格式不正确");
  25.                 goto label;                      //所有输入错误都直接跳转
  26.             }
  27.             try
  28.             {
  29.                 year = Convert.ToInt32(array[0]);
  30.                 month = Convert.ToInt32(array[1]);
  31.                 day = Convert.ToInt32(array[2]);
  32.             }
  33.             catch
  34.             {
  35.                 Console.WriteLine("请用数字格式的日期");
  36.                 goto label;
  37.             }
  38.             if (month > 12)
  39.             {
  40.                 Console.WriteLine("您输入的月份不正确");
  41.                 goto label;
  42.             }
  43.            
  44.             if (year % 400 == 0 | year % 4 == 0 && year % 100 != 0)         //对闰年平年做不同处理
  45.             {
  46.                 if (day > rdays[month - 1])                         //判断输入的日是否正确
  47.                 {
  48.                     Console.WriteLine("您输入的日期不正确");
  49.                     goto label;                  
  50.                 }
  51.                 for (int i = 0; i < month - 1; i++)
  52.                 {
  53.                     resultdays += rdays[i];                  //累加月份中的天数
  54.                 }
  55.                 resultdays += day;                              //加上日期中的天
  56.             }
  57.             else
  58.             {
  59.                 if (day > pdays[month - 1])                        
  60.                 {
  61.                     Console.WriteLine("您输入的日期不正确");
  62.                     goto label;
  63.                 }
  64.                 for (int i = 0; i < month - 1; i++)
  65.                 {
  66.                     resultdays += pdays[i];
  67.                 }
  68.                 resultdays += day;
  69.             }           
  70.             if (resultdays != 0)                          //如果都能运算到最后,则输出
  71.             {
  72.                 Console.WriteLine("您好,{0}是{1}年的第{2}天", datetime, year, resultdays);
  73.             }
  74.             label:        //跳转标签
  75.             Console.ReadKey();
  76.         }</P>
复制代码

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 .net的学员都过来了。赞

查看全部评分

回复 使用道具 举报
  1. import java.util.Scanner;

  2. import com.sun.org.apache.bcel.internal.generic.GOTO;

  3. public class DaysCalc {
  4.         public static void main(String[] args) {
  5.                 // 定义天数表,第0月表示闰年二月
  6.                 int[] monstab = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

  7.                 Scanner scan = new Scanner(System.in);
  8.                
  9.                 do {
  10.                
  11.                 String[] NowTime=scan.nextLine().split(" ");
  12.                
  13.                 if(NowTime.length==1&&NowTime[0].equals("exit"))
  14.                         break;
  15.                
  16.                 if(NowTime.length!=3||(!isRightDate(NowTime)))
  17.                         throw new RuntimeException("Date Syntax Error");
  18.                
  19.                 if(isLeapYear(Integer.parseInt(NowTime[0]))){
  20.                         arrayItemSwap(monstab, 0, 2);
  21.                 }
  22.                
  23.                 int month=Integer.parseInt(NowTime[1]);
  24.                 int mondays=Integer.parseInt(NowTime[2]);
  25.                 int Days=0;
  26.                
  27.                 for(int i=1;i<month;i++){
  28.                         Days+=monstab[i];
  29.                 }
  30.                 Days+=mondays;
  31.                
  32.                 System.out.print("本年的第"+Days+"天");
  33.                 }while(true);
  34.                
  35.                 scan.close();
  36.         }

  37.         // 交换数组元素
  38.         public static void arrayItemSwap(int[] origArr, int x, int y) {
  39.                 int temp = x;
  40.                 x = y;
  41.                 y = temp;
  42.         }

  43.         // 值判断格式正确性,其余不判断
  44.         public static boolean isRightDate(String[] time) {
  45.                 for (String s : time) {
  46.                         if (isDigit(s))
  47.                                 return false;
  48.                 }
  49.                 return true;
  50.         }

  51.         public static boolean isDigit(String s) {
  52.                 if (s.split("\\d").length < 1)
  53.                         return false;
  54.                 else
  55.                         return true;
  56.         }

  57.         public static boolean isLeapYear(int year) {
  58.                 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  59.         }
  60. }
复制代码


评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 小建议:控制台提示不够美观,不够人性化,.

查看全部评分

回复 使用道具 举报
本帖最后由 HM马强 于 2013-10-1 14:44 编辑
  1. package demo;

  2. import java.util.Scanner;

  3. public class varDayiy {
  4.         public static void main(String[] args) {
  5.                 /**
  6.                  * 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:
  7.                  * 以4月15日为例,应该先把前三个月的加起来,然后再加上15天即本年的第几天, 特殊情况,闰年且输入月份大于3时需考虑多加一天。
  8.                  *
  9.                  * 2.提示闰年的算法: 被4整除但不能被100整除为闰年 被400整除的为闰年
  10.                  *
  11.                  * */
  12.                 dayOfTheYear();
  13.         }

  14.         public static void dayOfTheYear() {
  15.                 Scanner scanner = new Scanner(System.in);
  16.                 while (true) {
  17.                         System.out
  18.                                         .println("请输入日期:\r\n\"格式:yyyy-MM-dd,如:2012-08-08\",退出请输入\"quit\"");
  19.                         String year = scanner.nextLine();
  20.                         if ("quit".equals(year)) {
  21.                                 scanner.close();
  22.                                 System.out.println("退出程序,谢谢使用");
  23.                                 break;
  24.                         }
  25.                         String[] arr = year.split("-");
  26.                         boolean b = isLeapYear(arr[0]);
  27.                         int temp = 0;
  28.                         temp = month(arr[1]);
  29.                         int day = Integer.parseInt(arr[2]);
  30.                         // 如果是闰年,并且在3月以后,temp + 1
  31.                         if (b == true && temp >= 59)
  32.                                 temp += 1;
  33.                         System.out.println(arr[1] + "月" + arr[2] + "日是" + arr[0] + "的第"
  34.                                         + temp + 1 + "天");

  35.                 }
  36.         }

  37.         private static int month(String month) {
  38.                 int temp = 0;
  39.                 switch (month) {
  40.                 case "1":// 31
  41.                 case "01":// 31
  42.                         temp = 0;
  43.                         break;
  44.                 case "2":// 28
  45.                 case "02":// 28
  46.                         temp = 31;
  47.                         break;
  48.                 case "3":// 31
  49.                 case "03":// 31
  50.                         temp = 59;
  51.                         break;
  52.                 case "4":// 30
  53.                 case "04":// 30
  54.                         temp = 90;
  55.                         break;
  56.                 case "5":// 31
  57.                 case "05":// 31
  58.                         temp = 120;
  59.                         break;
  60.                 case "6":// 30
  61.                 case "06":// 30
  62.                         temp = 151;
  63.                         break;
  64.                 case "7":// 31
  65.                 case "07":// 31
  66.                         temp = 181;
  67.                         break;
  68.                 case "8":// 31
  69.                 case "08":// 31
  70.                         temp = 212;
  71.                         break;
  72.                 case "9":// 30
  73.                 case "09":// 30
  74.                         temp = 243;
  75.                         break;
  76.                 case "10":// 31
  77.                         temp = 273;
  78.                         break;
  79.                 case "11":// 30
  80.                         temp = 304;
  81.                         break;
  82.                 case "12":// 31
  83.                         temp = 334;
  84.                         break;
  85.                 }
  86.                 return temp;
  87.         }

  88.         /**
  89.          * 判断是否为闰年
  90.          * */
  91.         public static boolean isLeapYear(String year) {
  92.                 int i = Integer.parseInt(year);
  93.                 if (i % 400 == 0)
  94.                         return true;
  95.                 if (i % 4 == 0 && i % 400 != 0) {
  96.                         return true;
  97.                 }
  98.                 return false;
  99.         }
  100. }
复制代码
  1. 请输入日期:
  2. "格式:yyyy-MM-dd,如:2012-08-08",退出请输入"quit"
  3. 2013-10-01
  4. 10月01日是2013的第2731天
  5. 请输入日期:
  6. "格式:yyyy-MM-dd,如:2012-08-08",退出请输入"quit"
  7. 2013-01-01
  8. 01月01日是2013的第01天
  9. 请输入日期:
  10. "格式:yyyy-MM-dd,如:2012-08-08",退出请输入"quit"
  11. quit
  12. 退出程序,谢谢使用
复制代码

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 case部分代码还可以优化

查看全部评分

回复 使用道具 举报
  1. import java.util.Scanner;

  2. public class Work
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int year,month,day; //年月日
  7.                 int days = 0;//每个月的天数
  8.                 int d = 0;//总计天数
  9.                 int e;
  10.                 Input in =new Input();
  11.                 do{
  12.                         e=0;
  13.                         System.out.println("输入年:");
  14.                         year = in.input();
  15.                         System.out.println("输入月:");
  16.                         month = in.input();
  17.                         System.out.println("输入日:");
  18.                         day = in.input();
  19.                         if(year<0||month<0||month>12||day<0||day>31)
  20.                         {
  21.                                 System.out.println("输入错误,请重新输入!");
  22.                                 e=1;
  23.                         }
  24.                 }while(e==1);
  25.                 for(int i=1;i<month;i++)
  26.                 {
  27.                         switch(i)
  28.                         {
  29.                         case 1:
  30.                         case 3:
  31.                         case 5:
  32.                         case 7:
  33.                         case 8:
  34.                         case 10:
  35.                         case 12:
  36.                                 days = 31;
  37.                                 break;
  38.                         case 4:
  39.                         case 6:
  40.                         case 9:
  41.                         case 11:
  42.                                 days = 30;
  43.                                 break;
  44.                         case 2:
  45.                                 if((year%400==0)||(year%4==0&&year%100!=0))
  46.                                         days = 29;
  47.                                 else
  48.                                         days = 28;
  49.                                 break;
  50.                         }
  51.                         d = d+days;
  52.                 }
  53.                 System.out.println(year+"-"+month+"-"+day+"是这一年的第"+(d+day)+"天。");
  54.         }
  55. }
  56. class Input
  57. {
  58.         public int input()
  59.         {
  60.                 int value = 0;
  61.                 Scanner s = new Scanner(System.in);
  62.                 value = s.nextInt();
  63.                 return value;
  64.         }
  65. }
复制代码
运行结果

QQ图片20131002001234.jpg (11.95 KB, 下载次数: 24)

QQ图片20131002001234.jpg

点评

下面评分理由不显示那么多文字,补充一下:"程序再进行判断"  发表于 2013-10-2 19:54

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 多数情况下,用户还是希望一次全部输入年月.

查看全部评分

回复 使用道具 举报
晨曦 中级黑马 2013-10-2 17:00:53
8#
  1. import java.util.Scanner;


  2. public class CountDay {
  3.         static int[] months = {31,28,31,30,31,30,31,31,30,31,30,31};
  4.         static int year,month,day;
  5.         public static void main(String[] args){
  6.                 System.out.println("请输入年月日,并以空格分开:");
  7.                 readInformation();
  8.                 int sumday =countYearDay(year,month,day);
  9.                 System.out.println(year+" "+month+" "+day+"是这一年的第"+sumday+"天");
  10.         }
  11.         private static int countYearDay(int year2, int month2, int day2) {
  12.                 // TODO Auto-generated method stub
  13.                 int sum=0;
  14.                 for(int i=0;i<month2-1;i++){
  15.                         sum+=months[i];
  16.                 }
  17.                 if(month2 > 2 && isLeap(year2))
  18.                         sum+=1;
  19.                 return sum+day2;
  20.         }
  21.         private static boolean isLeap(int year2) {
  22.                 // TODO Auto-generated method stub
  23.                 if((year%4==0 && year%100!=0 ) || (year % 400 == 0))
  24.                         return true;
  25.                 return false;
  26.         }
  27.         private static void readInformation() {
  28.                 // TODO Auto-generated method stub
  29.                 Scanner in = new Scanner(System.in);
  30.                 String[] inputs= in.nextLine().split(" ");
  31.                
  32.                 year = Integer.valueOf(inputs[0]);
  33.                 month = Integer.valueOf(inputs[1]);
  34.                 day = Integer.valueOf(inputs[2]);
  35.         }
  36. }
复制代码

QQ截图20131002170040.png (30.88 KB, 下载次数: 27)

QQ截图20131002170040.png

点评

种选择  发表于 2013-10-2 19:53

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 很少年月日用空格隔开。建议用户输入可以多.

查看全部评分

回复 使用道具 举报
  1. import java.util.Scanner;

  2. public class HowManyDay {
  3.         public static Scanner sc;
  4.         private static int year;
  5.         private static int month;
  6.         private static int day;
  7.         private static boolean b;
  8.         private static boolean b1;
  9.         private static boolean b2;

  10.         public static void main(String[] args)  {
  11.                
  12.                 chooseyear();
  13.         }
  14.         //选择年份并判断,将年份控制在1000-3000之间。
  15.         public static void chooseyear() {
  16.                 sc = new Scanner(System.in);
  17.                 System.out.println("请输入年份:");
  18.                
  19.                 year = sc.nextInt();
  20.                 while(year<1000|year>3000) {
  21.                         System.out.println("输入的年份不合法,请在1000-3000之间选择年份:");
  22.                         year = sc.nextInt();
  23.                 }
  24.                 choosemonth(year);
  25.         }
  26.         //选择月份
  27.         public static void  choosemonth(int year) {
  28.                 sc = new Scanner(System.in);
  29.                
  30.                 System.out.println("请输入月份:");
  31.                 month = sc.nextInt();
  32.                 while (month>12 | month<1){
  33.                         System.out.println("输入的月份不合法,重新输入:");
  34.                         month = sc.nextInt();       
  35.                 }
  36.                
  37.                 chooseday(year,month);
  38.         }
  39.        
  40.        
  41.         //选择月的号数
  42.         public static void chooseday(int year,int month) {
  43.                 sc = new Scanner(System.in);
  44.                 //判断是否为闰年
  45.                 b = isLeapYear(year);
  46.                 //1 3 5 7 8 10 12 这几个月每个月有31天
  47.                 int[] arr1 ={1,3,5,7,8,10,12};
  48.                 //查看输入的月份是否在数组之中
  49.                 b1=        whitchMonth(arr1,month);
  50.                 // 4 6 9 11 每个月有 30天
  51.                 int[] arr2 = {4,6,9,11};
  52.                
  53.                 b2=        whitchMonth(arr2,month);

  54.                 System.out.println("请输入日数:");
  55.                
  56.                 day = sc.nextInt();
  57.                
  58.                 while(day<=0){
  59.                         System.out.println("天数为正整数重新输入:");
  60.                         day = sc.nextInt();
  61.                 }
  62.                 //非闰年的情况
  63.                 if(b==false) {
  64.                         //处理输入的天数是否正确
  65.                         // 2月的情况
  66.                         if(b1==false && b2==false){
  67.                                 while(day>28){
  68.                                         System.out.println(year+"年"+month+"月最多只有28天,请重新输入:");
  69.                                         day = sc.nextInt();
  70.                                 }
  71.                                 getResult(year,month,day,b);
  72.                        
  73.                         }
  74.                         //非2月的情况
  75.                         isDayTrue(b1,year,month,day,b);
  76.                 }
  77.        
  78.                 //闰年时候的判断
  79.                 if(b==true)        {
  80.                         //2月的时候
  81.                         if(b1==false && b2==false){
  82.                                 while(day>29){
  83.                                         System.out.println(year+"年"+month+"月最多只有29天,请重新输入:");
  84.                                         day = sc.nextInt();
  85.                                 }
  86.                        
  87.                                 getResult(year,month,day,b);       
  88.                         }
  89.                        
  90.                         //非2月的时候
  91.                         isDayTrue(b1,year,month,day,b);
  92.                 }
  93.                
  94.         }
  95.         //判断输入的月数在哪个数组的方法。
  96.         private static boolean whitchMonth(int[] arr1, int month2) {
  97.                
  98.                 for (int i = 0; i < arr1.length; i++) {
  99.                         if(arr1[i]!=month2)
  100.                                 continue;
  101.                         return true;
  102.                 }
  103.                
  104.                 return false;
  105.         }
  106.        
  107.         //当不是二月的时候对天数的处理
  108.         public static void isDayTrue(boolean b1, int year, int month,
  109.                         int day, boolean b) {
  110.                
  111.                 if(b1==true && b2==false) {
  112.                        
  113.                         while(day>31){
  114.                                 System.out.println(month+"月最多只有31天,请重新输入");
  115.                                 day = sc.nextInt();
  116.                         }
  117.                        
  118.                         getResult(year,month,day, b);
  119.                        
  120.                 }
  121.                
  122.                 else if(b2==true &&b1==false){
  123.                        
  124.                         while(day>30){
  125.                                 System.out.println(month+"月最多只有30天,请重新输入");
  126.                                 day = sc.nextInt();
  127.                         }
  128.                
  129.                         getResult(year,month,day,b);       
  130.                 }
  131.         }
  132.        
  133.        
  134.         //计算天数的方法。
  135.         private static void getResult(int year,int month, int day,boolean b) {
  136.                 int result = 0;
  137.                 //将每个月的天数变成数组。在数组前加上0元素时为了让月数和数组的角标值匹配
  138.                 int[] arr = {0,31,28,31,30,31,30,31,31,30,31,30,31};
  139.                 //非闰年的情况下第二个月为28天
  140.                 if(b==false){
  141.                         arr[2]=28;
  142.                 }
  143.                 //闰年时候2月为29天
  144.                 else{
  145.                         arr[2]=29;
  146.                 }
  147.                 for (int i = 1; i < month; i++) {
  148.                         result+=arr[i];
  149.                 }
  150.        
  151.                 System.out.println(year+"年"+month+"月"+day+"日"+"是该年的第"+(result+day)+"天");
  152.         }       
  153.        
  154.         //判断是否为闰年
  155.         public static boolean isLeapYear(int year) {
  156.                
  157.                 if (year%4==0) {
  158.                         if (year%100==0) {
  159.                                 if(year%400==0)
  160.                                         return true;
  161.                                 return false;
  162.                         }
  163.                         return true;
  164.                 }
  165.                 return false;
  166.         }

  167. }
复制代码

评分

参与人数 1技术分 +3 收起 理由
潘才新 + 3 代码好多!

查看全部评分

回复 使用道具 举报
本帖最后由 lihaotian_120 于 2013-10-2 20:20 编辑
  1. import java.io.*;
  2. class DateTest
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  7.                 String date;
  8.                 date=bufr.readLine();//某年某月某日
  9.                 System.out.println(work(date));
  10.                
  11.         }
  12.         public static int work(String date)
  13.         {               
  14.                 String[] d=date.split("\\P{ASCII}");//进行字符串分割,分离出年月日
  15.                 int[] count={31,28,31,30,31,30,31,31,30,31,30,31};//定义一个数组储存每个月的基本天数
  16.                 int year=Integer.parseInt(d[0]);//分离出年
  17.                 int month=Integer.parseInt(d[1]);//分离出月份
  18.                 int day=Integer.parseInt(d[2]);//分离出日期
  19.                 int tot=day;//tot用于计算总天数,第一步计算日期的天数
  20.                 for(int i=1;i<=month-1;i++)//第二步,算出经过的月份的总天数
  21.                 {
  22.                         tot+=count[i-1];
  23.                 }
  24.                 if((year%4==0&&year%100!=0||year%400==0)&&month>2)//第三步,根据是否为闰年,是否加上2月份多出的一天
  25.                         tot++;
  26.                 return tot;
  27.         }
  28. }
复制代码

QQ截图20131002201918.png (15.94 KB, 下载次数: 27)

QQ截图20131002201918.png

QQ截图20131002201934.png (8.11 KB, 下载次数: 21)

QQ截图20131002201934.png
回复 使用道具 举报

import java.util.*;
                       
class RiQi{
        public static void main(String[] arge){

                Scanner in=new Scanner(System.in);
                System.out.println("请输入年份");
                int year=in.nextInt();
                System.out.println("请输入月份");
                int month=in.nextInt();
                //int sum=0;
                int a=getYear(year);
                System.out.println(year+"年="+a+"天");
                       
                int b=getMonth( year,month);
               
                System.out.println(year+"年"+month+"月="+b+"天");
               
                int c=b-a;
                System.out.println("这一天是这一年的"+c+"天!");
        }
                //判断平年还是闰年
                public static int getYear(int year){
                        int sum=0;
                        for(int i=2010;i<year;i++){
                                if(i%4==0&&i%100!=0||i%400==0)
                                        sum+=366;
                                else
                                        sum+=365;
                        }
                        return sum;
                }
               
                /**/
                public static int getMonth(int year,int month){
                        int sum=getYear(year);
                        for(int i=1;i<month;i++){
                                if(i==2){
                                        //判断闰年的2月份+28天,平年就加29天
                                        if(year%4==0&&year%100!=0||year%400==0)
                                                sum+=29;
                                        else
                                                sum+=28;
                                }
                                else{
                                        if(i==4)
                                                sum+=30;
                                        if(i==6)
                                                sum+=30;
                                        if(i==9)
                                                sum+=30;
                                        else
                                        if(i==11)
                                                sum+=30;
                                                sum+=31;
                                }
                        }
                        sum+=1;
                        return sum;
                }
       
}
回复 使用道具 举报
我来瞅瞅~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马