黑马程序员技术交流社区

标题: (已结束)答题活动重新开张,题目简单,赶快来抢! [打印本页]

作者: 神之梦    时间: 2013-7-31 19:06
标题: (已结束)答题活动重新开张,题目简单,赶快来抢!
本帖最后由 神之梦 于 2013-8-4 21:58 编辑

说明:
  由于上周滔哥出了个20分的大题,故本版的答题活动暂时中断。
  现在正式重新启动,不打算出很难的题目,也不打算一次性出很多的题;
  每次就一两个比较简单的题目,答题时间有限制,答题活动的持续时间最多三天。


此次活动结束,欢迎下次再来{:soso_e157:}



题目:

  输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
  程序分析:以2013年7月为例,使用循环计算1898年1月1日距离2013年1月1日的总天数(考虑闰年与平年的情况)

                  再计算2013年1月1日距离7月的总天数


要求:

  1、题目须自己做出,有问题请及时联系楼主。
  2、直接在本帖回复,代码放在代码块中。
  3、代码要有适当注释,无注释无分。
  4、由于题目不难,思路也可以多种,所以某个思路第一个做出来,且结果正确的2分;接下来如果思路相同,结果正确的1分。







作者: 曹奎    时间: 2013-7-31 19:21
抢分咯!抢分咯!抢分咯!
作者: 王靖远    时间: 2013-7-31 19:22
看看再说
作者: zhouchao    时间: 2013-7-31 19:38
嘿嘿  来抢题啦!
作者: 张俊生    时间: 2013-7-31 19:39
我看看










作者: 黄兴旺    时间: 2013-7-31 19:39
嘿嘿  来啦。
作者: ☆今☆    时间: 2013-7-31 19:43
看看.......
作者: longlangcx    时间: 2013-7-31 20:12
看看~~~~~~~
作者: 肥猫    时间: 2013-7-31 20:28
本帖最后由 肥猫 于 2013-8-1 21:53 编辑

小苗你去给我加3分啊~~.怎么没屏蔽?
  1. package cn.lj.singleton;

  2. import java.util.Scanner;

  3. /**
  4. * 健壮性不够啊,不想在去加什么正则,抛什么异常了,只完成基本功能.
  5. *
  6. * @author 肥猫
  7. * */
  8. public class CheckCalendar2 {

  9.        public static void main(String[] args) {
  10.                Scanner input = new Scanner(System.in);
  11.                System.out.print("输入日期:");
  12.                String s = input.nextLine();
  13.                String[] str = s.split("-");// 以-分割字符串将年月日分别开存并进行累加
  14.                int year = Integer.parseInt(str[0]);
  15.                int month = Integer.parseInt(str[1]);
  16.                int day = Integer.parseInt(str[2]);
  17.                int count, i, total = 0;
  18.                boolean leap = false;
  19.                leap = (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);// 判别闰年的条件
  20.                count = 0;
  21.                for (int j = 1898; j < year; j++) {// 累计总天数的循环
  22.                      if (j % 400 == 0 || j % 4 == 0 && j % 100 != 0) {
  23.                             total += 366;
  24.                     } else {
  25.                             total += 365;
  26.               }
  27.       }

  28.                for (i = 1; i <= month - 1; i++) {// 累计是今年第几天的循环
  29.                  switch (i) {
  30.                      case 1:
  31.                      case 3:
  32.                      case 5:
  33.                      case 7:
  34.                      case 8:
  35.                      case 10:
  36.                      case 12:

  37.                             count = count + 31;
  38.                             break;
  39.                      case 4:
  40.                      case 6:
  41.                      case 9:
  42.                      case 11:

  43.                             count = count + 30;
  44.                             break;
  45.                      case 2:
  46.                          if (leap) {

  47.                           count = count + 29;
  48.                       } else {

  49.                           count = count + 28;
  50.             }
  51.                       break;
  52.                       default:
  53.         }
  54.    }
  55.             count = count + day;// 今年的天数
  56.             System.out.println("是今年的第:" + count + "天");
  57.             System.out.println("距离1898年1月1日已经:" + total + "天了");
  58.             if (input != null) {// 关闭流
  59.             input.close();
  60.         }
  61.      }
  62. }
复制代码

作者: 牛海亮    时间: 2013-7-31 20:47
来看看~
作者: woaiheima    时间: 2013-7-31 20:51
抢题喽抢题喽抢题喽
作者: 张俊生    时间: 2013-7-31 21:09
本帖最后由 风雨兼程 于 2013-7-31 21:44 编辑
  1. 顶题了
复制代码

作者: 无我    时间: 2013-7-31 21:11
看看神马
作者: ☆今☆    时间: 2013-7-31 21:21
  1. import java.text.SimpleDateFormat;
  2. import java.util.Calendar;
  3. import java.util.Scanner;

  4. public class Test4 {
  5.         public static void main(String[] args) {
  6.                 Scanner sc = new Scanner(System.in);

  7.                 String date = sc.nextLine();// 输入"年 月"的形式
  8.                 String[] s = date.split(" ");// 然后用空格将年和月分开,存在数组中
  9.                 int year = Integer.parseInt(s[0]);// 获取年
  10.                 int month = Integer.parseInt(s[1]);// 获取月份

  11.                 Calendar c = Calendar.getInstance();// 创建Calendar对象
  12.                 int day1 = 0; // 定义计数器,用来存储天数,年之间相距的时间
  13.                 for (int i = 1898; i < year; i++) {
  14.                         c.set(i, 1, 1);
  15.                         day1 += c.getMaximum(Calendar.DAY_OF_YEAR);// 获取每一年的天数
  16.                 }
  17.                 c.set(year, month, 1);// 设置时间为输入的时间
  18.                 int day2 = c.get(Calendar.DAY_OF_YEAR);// 获取输入时间距离1月1日的天数
  19.                 day2 += day1;// 输入的时间距1989年1月1日的时间
  20.                 System.out.println(year + "年1月1日距1989年1月1日的天数是:" + day1);
  21.                 System.out.println(year + "年" + month + "月" + "距1989年1月1日的天数是:" + day2);
  22.         }
  23. }
复制代码

作者: luckwei    时间: 2013-7-31 21:24
看看{:soso_e130:}
作者: 黑马王晓明    时间: 2013-7-31 21:28
:)                           
作者: 无气打火机    时间: 2013-7-31 21:28
瞧一瞧看一看咯
作者: lou413    时间: 2013-7-31 21:36
看一看,瞧瞧题目:)
作者: longlangcx    时间: 2013-7-31 21:53
  1. /*
  2.         题目:输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
  3. */

  4. import java.util.Calendar;
  5. import java.util.Scanner;

  6. class  GetDay
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner in = new Scanner(System.in);
  11.                 String str;
  12.                 System.out.println("请出入一个年月,中间用空格隔开,如2013 7 :");
  13.                 int year, month;
  14.                 while(true){
  15.                         str = in.nextLine();
  16.                         if(str.matches("\\d+ +[01]?\\d")){
  17.                                 String[] strArr = str.split(" +");
  18.                                 year = Integer.parseInt(strArr[0]);
  19.                                 month = Integer.parseInt(strArr[1]);
  20.                                 if(year > 0 || month > 0 || month < 13)
  21.                                         break;
  22.                         }                       
  23.                         System.out.println("输入格式错误,请重新输入");
  24.                 }
  25.                 //输出结果
  26.                 System.out.println(year + "年距离1898年1月1日的天数为: " + getTotalDay(year) + "天");
  27.                 System.out.println(year + "年" + month + "月距离该年1月1日的天数为: " + getTotalDay_1(year,month) + "天");
  28.                
  29.         }

  30.         //获取从某一年的1月1日距离1898年的天数
  31.         public static int getTotalDay(int year){
  32.                 if(year == 1898)
  33.                         return 0;
  34.                 int smaller, bigger;
  35.                 if(year > 1898){
  36.                         smaller = 1898;
  37.                         bigger = year;
  38.                 }else{
  39.                         smaller = year;
  40.                         bigger = 1898;
  41.                 }
  42.                 int sum = 0;
  43.                 Calendar c = Calendar.getInstance();
  44.                 while(smaller < bigger){
  45.                         c.set(++smaller, 0, 1);
  46.                         c.add(Calendar.DAY_OF_MONTH, -1);
  47.                         sum += c.get(Calendar.DAY_OF_YEAR);
  48.                 }
  49.                 return sum;
  50.         }

  51.         //获取某月的第一天距离当年第一天有多少天
  52.         public static int getTotalDay_1(int year, int month){
  53.                 int sum = 0;
  54.                 Calendar c = Calendar.getInstance();
  55.                 for(int i = 1; i < month; i++){
  56.                         c.set(year, i, 1);
  57.                         c.add(Calendar.DAY_OF_MONTH, -1);
  58.                         sum += c.get(Calendar.DAY_OF_MONTH);
  59.                 }
  60.                 return sum;
  61.         }
  62. }
复制代码

作者: 木偶_freedom    时间: 2013-7-31 22:02
哦 哦 终于来了
作者: hmYing    时间: 2013-7-31 22:27
看题,看题
作者: chslzj    时间: 2013-7-31 22:38
我能继续混技术分么?
作者: 夜写意    时间: 2013-7-31 22:43
来看看,抢楼抢分抢美女,如果有的话。
作者: lou413    时间: 2013-7-31 22:51
  1. /* 要求:输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天
  2. */
  3. import java.util.Scanner;
  4. class Test{
  5. //判断输入的年份是否是闰年,是返回真,不是则返回假
  6. public static boolean isLeepYear(int year){
  7.        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  8. }
  9. //获取这一年的天数
  10. public static int getDaysByYear(int year) {
  11.   if (isLeepYear(year))
  12.         return 366;
  13.   else
  14.         return 365;
  15. }
  16. public static void main(String[] args){
  17.     Scanner s = new Scanner(System.in);
  18.     System.out.print("请选择年份:");
  19.     int year = s.nextInt(); // 输入年
  20.    System.out.print("请选择月份:");
  21.    int month = s.nextInt(); // 输入月
  22.    int days=0; //统计天数
  23.    //定义一个整数数组,用来存储每个月的天数
  24.    int[] monthly={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  25.   //判断这一年是否是闰年,是则将数组中的序标为1的数值改为29;
  26.   if(isLeepYear(year)){
  27.       monthly[1]=29;
  28.   }
  29.    //计算输入的年数距离1898年的天数
  30.   for(int i=1898;i<year;i++){
  31.        days+=getDaysByYear(year);
  32.   }
  33.    //计算输入的月份到1月的天数
  34.   for(int j=0;j<=month-1;j++){
  35.      days+=monthly[j];
  36.   }
  37.     System.out.println(year+"年"+month+"月距离1898年1月1日天数为:"+days);
  38. }
  39. }
复制代码

作者: hmYing    时间: 2013-8-1 00:05
file:///C:/Users/Administrator/Desktop/%E8%AE%A1%E7%AE%97%E5%A4%A9%E6%95%B0.PNG
作者: hmYing    时间: 2013-8-1 00:05
hmYing 发表于 2013-8-1 00:05

import java.util.Scanner;
/**
* 输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
* 程序分析:以2013年7月为例,使用循环计算1898年1月1日距离2013年1月1日的总天数(考虑润年与平年的情况)
*                  再计算2013年1月1日距离7月的总天数
*/
public class CountDays {

        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                System.out.printf("请输入一个年份:");
                int year = in.nextInt();               
                System.out.printf("请输入一个月份:");
                int month = in.nextInt();
                               
                int daysToYear = 0;
                for(int i=1898;i<year;i++){
                        daysToYear +=365;
                        if(i%400 == 0){
                                daysToYear += 1;
                        }else if(i%4==0 && i%100!=0){
                                daysToYear += 1;
                        }else{
                                ;
                        }
                }               
                int daysToMonth = 0;
                int []months = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
                for(int j=0;j<month;j++){
                        daysToMonth += months[j];
                }
                if((year%400==0)||(year%4==0 && year%100!=0)){
                        if(month>=2){
                                daysToMonth += 1;
                        }
                }
               
                System.out.println("距离"+year+"年有"+daysToYear+"天");
                System.out.println("距离"+year+"年"+month+"月有"+(daysToYear+daysToMonth)+"天");
        }
}
作者: hmYing    时间: 2013-8-1 00:09
eclipse中编写代码计算天数

计算天数.PNG (50.33 KB, 下载次数: 7)

计算天数.PNG

作者: sergio    时间: 2013-8-1 00:19
看看是怎么样的
作者: 小罴孩    时间: 2013-8-1 09:31
鼎力支持~!壮哉我大黑马
作者: zdew    时间: 2013-8-1 10:22
好的,来瞧一瞧
作者: sergio    时间: 2013-8-1 10:37


  1. import java.util.Scanner;

  2. /**
  3. * @ClassName: DayOfYear_Month
  4. * @Description: TODO(这里用一句话描述这个类的作用)
  5. * @author Sergio Han
  6. * @date 2013-8-1 上午10:07:38
  7. *
  8. */

  9. public class DayOfYear_Month {

  10.         public static void main(String[] args) {
  11.                
  12.                 //创建输入对象
  13.                 Scanner in = new Scanner(System.in);
  14.                
  15.                 System.out.println("请输入年份: ");
  16.                 int year = in.nextInt();
  17.                 System.out.println("请输入月份");
  18.                 int month = in.nextInt();
  19.                
  20.                 in.close(); //关闭输入
  21.                
  22.                 int days = 0; //统计天数变量
  23.                
  24.                 //循环获取距离的天数
  25.                 for(int i = 1898; i < year; i++)
  26.                 {
  27.                         days += getDaysByYear(i);
  28.                 }
  29.                
  30.                 //给定每年的月份天数
  31.                 int[] daysOfmonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  32.                 //判断是否为闰年,如果是把2月份设置为29天,也就是daysOfmonth数组下标为1的值为29
  33.                 if(isLeepYear(year))
  34.                 {
  35.                         daysOfmonth[1] = 29;
  36.                 }
  37.                
  38.                 //计算结果年份距离天数
  39.                 System.out.println("输入年份距离1898年1月1日的天数: " + days);
  40.                
  41.                 //循环获取月份的天数
  42.                 for(int i = 1; i < month; i++)
  43.                 {
  44.                         days += daysOfmonth[i];
  45.                 }
  46.                
  47.                 //计算结果月份距离天数
  48.                 System.out.println("输入月份距离1898年一月一日的天数 :" + days);
  49.                 System.out.println("当前月份的天数:" + daysOfmonth[month]);
  50.                
  51.         }
  52.        
  53.         //获取某年的天数
  54.         public static int getDaysByYear(int year)
  55.         {
  56.                 //判断是否为闰年
  57.                 if(isLeepYear(year))  
  58.                 {
  59.                         return 366;
  60.                 }else {
  61.                         return 365;
  62.                 }
  63.         }
  64.        
  65.         //判断是否闰年
  66.         public static boolean isLeepYear(int year)
  67.         {
  68.                 return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  69.         }
  70. }

复制代码

作者: Rainbow    时间: 2013-8-1 10:40
看一下 做题了
作者: zdew    时间: 2013-8-1 11:00
  1. import java.util.*;
  2. /**
  3. 输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
  4.   程序分析:以2013年7月为例,使用循环计算1898年1月1日距离2013年1月1日的总天数(考虑闰年与平年的情况)
  5.                   再计算2013年1月1日距离7月的总天数
  6. */

  7. class Demo
  8. {
  9.         public static final int baseYear = 1898;

  10.         public static void main(String[] args)
  11.         {
  12.                 Scanner scan = new Scanner(System.in);
  13.                 System.out.print("请输入年份:");
  14.                 int year = scan.nextInt();
  15.                 System.out.print("请输入月份:");
  16.                 int month = scan.nextInt();
  17.                
  18.                 //如果输入年份大于1898年
  19.                 if(year >= baseYear)
  20.                 {
  21.                         System.out.println(getDays1(year, month));
  22.                 }
  23.                 else
  24.                 {
  25.                         System.out.println(getDays2(year, month));
  26.                 }
  27.         }

  28.         public static long getDays1(int year, int month)
  29.         {
  30.                 long sum = 0l;
  31.                
  32.                 //遍历年,瑞年366,平年365
  33.                 for(int i = baseYear; i < year; i++)
  34.                 {
  35.                         if(isLeapYear(i))
  36.                         {
  37.                                 sum += 366;
  38.                         }
  39.                         else
  40.                         {
  41.                                 sum += 365;
  42.                         }
  43.                 }
  44.                
  45.                 //遍历月份
  46.                 for(int i = 1; i < month; i++)
  47.                 {
  48.                         switch(i)
  49.                         {
  50.                                 case 1:
  51.                                 case 3:
  52.                                 case 5:
  53.                                 case 7:
  54.                                 case 8:
  55.                                 case 10:
  56.                                 case 12:
  57.                                         sum += 31;
  58.                                         break;
  59.                                 case 2:
  60.                                         if(isLeapYear(year))
  61.                                         {
  62.                                                 sum += 29;
  63.                                         }
  64.                                         else
  65.                                         {
  66.                                                 sum += 28;
  67.                                         }
  68.                                         break;
  69.                                 case 4:
  70.                                 case 6:
  71.                                 case 9:
  72.                                 case 11:
  73.                                         sum += 30;
  74.                                         break;
  75.                         }
  76.                 }

  77.                 return sum;
  78.         }
  79.        
  80.         //如果year小于1898,计算方法就变了
  81.         public static long getDays2(int year, int month)
  82.         {
  83.                 long sum = 0;

  84.                 for(int i = year; i < baseYear; i++)
  85.                 {
  86.                         if(isLeapYear(i))
  87.                         {
  88.                                 sum += 366;
  89.                         }
  90.                         else
  91.                         {
  92.                                 sum += 365;
  93.                         }
  94.                 }

  95.                 for(int i = 1; i < month; i++)
  96.                 {
  97.                         switch(i)
  98.                         {
  99.                                 case 1:
  100.                                 case 3:
  101.                                 case 5:
  102.                                 case 7:
  103.                                 case 8:
  104.                                 case 10:
  105.                                 case 12:
  106.                                         sum -= 31;
  107.                                         break;
  108.                                 case 2:
  109.                                         if(isLeapYear(year))
  110.                                         {
  111.                                                 sum -= 29;
  112.                                         }
  113.                                         else
  114.                                         {
  115.                                                 sum -= 28;
  116.                                         }
  117.                                         break;
  118.                                 case 4:
  119.                                 case 6:
  120.                                 case 9:
  121.                                 case 11:
  122.                                         sum -= 30;
  123.                                         break;
  124.                         }
  125.                 }

  126.                 return sum;
  127.         }
  128.        
  129.         //判断是否是瑞年
  130.         public static boolean isLeapYear(int year)
  131.         {
  132.                 //1. 能被4整除,但不能被100整除。2.能被400整除
  133.                 if(year%4 == 0 && year%100 != 0 || year%400 == 0)
  134.                 {
  135.                         return true;
  136.                 }
  137.                 return false;
  138.         }
  139. }
复制代码

作者: chilong_333    时间: 2013-8-1 11:41
虽然我分够了,不过还是来看看吧
作者: chilong_333    时间: 2013-8-1 11:41
虽然我分够了,不过还是来看看吧
作者: emos-c    时间: 2013-8-1 13:05
看看会不会
作者: xuaner0719    时间: 2013-8-1 16:10
支持一下,看看
作者: jrry    时间: 2013-8-1 16:26
好难的题目
作者: 苏联兵    时间: 2013-8-1 16:35
试试吧,检验一下自己。
作者: Angel♥儱唲    时间: 2013-8-1 17:27
飘过来瞄一眼看看能回答不
作者: 刘张朋    时间: 2013-8-1 19:30
为了做题,老板安排加班都不去了,加油!进黑马
作者: 牛牛    时间: 2013-8-1 19:57
来尝试下~
作者: 肥猪    时间: 2013-8-1 20:31
GOGOGOGOGO
作者: 牛牛    时间: 2013-8-1 21:01

/**
* 题目:
*  输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
   程序分析:以2013年7月为例,使用循环计算1898年1月1日距离2013年1月1日的总天数(考虑闰年与平年的情况)
                   再计算2013年1月1日距离7月的总天数

*1、年数是整百的年(比如说2000年),要能被400整除则是闰年
* (2000/400=5~~2000年是闰年)(1900/400=4.75~~1999年不是闰年)
*2、年数不是整百的年(比如说2007年),要能被4整除则是闰年
* (2068/4=527~~2068年是闰年)(2007/4=501.75~~2007年不是闰年)
*
* 1、3、5、7、8、10、12,31天
* 4、6、9、11,30天
* 2月(闰年29天,平年28天计算)
* 平年一年365天
* 闰年一年366天
*
*  思路:
*  1.先求出两年差
*  2.求出这几天来有多少个闰年
*  3.平年比闰年少一天   这样就可以如此求出:这几年有多少天=(年差*365)+(这几年有多少闰年)
*   
*/
public class Exercise_2 {

public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  System.out.print("请输入年:");
  int year = scanner.nextInt();
  System.out.println();
  System.out.print("请输入月:");
  int month = scanner.nextInt();
  System.out.println();
  
  System.out.println(year+"年距离1898年1月1日有"+getDay(1898,year)+"天");
  System.out.println(year+"年"+month+"月1日距离1898年1月1日有"+(getDay(1898,year)+getDay(year,month,0))+"天");
  
}

/**
  * 获取相差年天数
  * @param startYear
  * @param endYear
  * @return
  */
public static int getDay(int startYear ,int endYear){
  int totalDay = 0;
  int totalYear = endYear - startYear;//求年差
  int count4 =  ((totalYear-1)+(4-((startYear)%4)))/4;//求这几年中能被4整除的年份
  int count100 =  ((totalYear-1)+(100-((startYear)%100)))/100;//求这几年中能被100整除的年份
  int count400 =  ((totalYear-1)+(400-((startYear)%400)))/400;//求这几年中能被400整除的年份
  totalDay = ((totalYear) * 365)+(count4-count100+count400);//这几年有多少天=(年差*365)+(这几年有多少闰年)
  return totalDay;
}

/**
  * 获取当前年过了多少天
  * @param year
  * @param motch
  * @param day
  * @return
  */
public static int getDay(int year,int motch,int day){
  int totalDay = 0;
  boolean isLeapYear = ((year%100!=0)&&(year%4==0))||(year%400==0);
  if(motch>=2){
   totalDay = getDay(motch)+day+(isLeapYear?1:0);
  }else{
   totalDay = day;
  }
  return totalDay;
}

/**
  * 获取这个月减一个到今年1月1日的天数(按平年计算)
  * @param motch
  * @return
  */
public static int getDay(int motch){
  int totalDay = 0;
  switch(motch-1){
  case 12:
   totalDay = totalDay+31;
  case 11:
   totalDay = totalDay+30;
  case 10:
   totalDay = totalDay+31;
  case 9:
   totalDay = totalDay+30;
  case 8:
   totalDay = totalDay+31;
  case 7:
   totalDay = totalDay+31;
  case 6:
   totalDay = totalDay+30;
  case 5:
   totalDay = totalDay+31;
  case 4:
   totalDay = totalDay+30;
  case 3:
   totalDay = totalDay+31;
  case 2:
   totalDay = totalDay+28;
  case 1:
   totalDay = totalDay+31;
   default:
    break;
  }
  return totalDay;
}


作者: 刘张朋    时间: 2013-8-1 21:14
  1. package com.itheima;

  2. import java.util.Calendar;
  3. import java.util.Scanner;

  4. public class CalendarTest {

  5.         /**
  6.          * @param args
  7.          */
  8.         public static void main(String[] args) {
  9.                 /*
  10.                  *1. 版主,我没有用循环的方法,而是直接用了Calendar类的set方法设置了日期,
  11.                  * 同时用getTimeInMillis获取了毫秒值,然后将毫秒值相减的到相差的毫秒数,
  12.                  * 通过转换得到天数,如果此方法有何不妥的地方请指教
  13.                  *2.同时因为不知道输入的格式是什么,那我默认你的输入格式是:年.月
  14.                  */
  15.                
  16.                 //获取输入年月的字符串
  17.                 Scanner s = new Scanner(System.in);
  18.                 System.out.println("请输入您指定的年月,格式:年.月");
  19.                 String inDay = s.next();
  20.                
  21.                 //判断输入的格式和年月是否符合要求,如果是1到9月,直接输入1到9,如果是10到12月,输入两位月份
  22.                 if(!(inDay.matches("[\\d]{4}.[1][12]") || inDay.matches("[\\d]{4}.[1-9]")))
  23.                         throw new RuntimeException("输入的格式不对,请重新输入");
  24.                        
  25.                 //将输入的年月按年和月分开,存进数组
  26.                 String[] date = inDay.split("\\.");
  27. //                System.out.println(date[0]+"::"+date[1]);
  28.        
  29.                 //获取输入的年月
  30.                 int year = Integer.parseInt(date[0].trim());
  31.                 int day = Integer.parseInt(date[1])-1;        //月份有0到11的数字分别表示1到12月
  32. //                System.out.println(year+"::"+day);
  33.                
  34.                 //获取三个Calendar对象,并将c1设置为1898年1月1日,c2设置为输入年的1月1日,c3设置为输入年月的那个月的1日
  35.                 Calendar c1 = Calendar.getInstance();
  36.                 c1.set(1898, 0, 1);
  37.                
  38.                 Calendar c2 = Calendar.getInstance();
  39.                 c2.set(year, 0,1);
  40.                
  41.                 Calendar c3 = Calendar.getInstance();       
  42.                 c3.set(year, day,1);
  43.                
  44.                 long yearMillis = c1.getTimeInMillis();
  45.                 long inYearMillis = c2.getTimeInMillis();               
  46.                 long inMonthMillis = c3.getTimeInMillis();
  47.                
  48.                 //获取输入年到1898年1月1日的天数
  49.                 int yearDays = CalendarTest.getDays((inYearMillis - yearMillis));
  50. //                System.out.println((inYearMillis - yearMillis)/1000/60/60/24);
  51.                
  52.                 //获取输入月到1898年1月1日的天数
  53.                 int monthDays = CalendarTest.getDays((inMonthMillis - yearMillis));
  54. //                System.out.println((inMonthMillis - yearMillis)/1000/60/60/24);
  55.                
  56.                 System.out.println(inDay + ":这一年到1898年1月1日的天数为" + yearDays
  57.                                 + "天,这一月到1898年1月1日的天数为" + monthDays + "天");
  58.                
  59.                                
  60. //                System.out.println(CalendarTest.getDays(24*60*60*1000*2+1000));
  61.         }
  62.         //定义一个通过毫秒值获取天数的方法
  63.         public static int getDays(long timeInMillis){
  64.                 return (int)(timeInMillis/1000/60/60/24);
  65.                
  66.         }

  67. }
复制代码

作者: 水。。。海    时间: 2013-8-1 21:16
今天再干一票

作者: 徐龙飞    时间: 2013-8-1 21:20
看看这个是什么
作者: 肥猪    时间: 2013-8-1 21:36
  1. public class Frist {
  2.         public static void main(String[] args)
  3.         {
  4.                 judge(2013,7);
  5.         }
  6.        
  7.         public static void judge(int year,int month)
  8.         {
  9.                 int count = 0; //计数器来统计闰年的个数
  10.                 int yearD = 0;
  11.                 int monthD=0;
  12.                 int[] leap ={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年时候每月天数,角标0的数值为0这样可以以角标直接对应月份
  13.                 int[] common={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年时每月天数
  14.                 for(int x=1989; x<=year; x++)
  15.                         if(x%4==0 && x%4!=0 ||x%400==0)
  16.                                 count++;
  17.                  yearD=366*count+365*(year-1989-count);
  18.                  
  19.                  System.out.println(year+"年距1989年"+yearD+"天");
  20.                  
  21.                  if(year%4==0 && year%4!=0 ||year%400==0)
  22.                  {
  23.                          for(int x = 0; x<month; x++)
  24.                                  monthD = monthD + leap[x];
  25.                  }
  26.                  else
  27.                  {
  28.                          for(int y = 0; y<month; y++)
  29.                                  monthD = monthD + common[y];
  30.                 }
  31.                        
  32.                  monthD =monthD + yearD;                 
  33.                  System.out.println(year+"年"+month+"月距离1989年1月1日"+monthD+"天");
  34.         }
  35. }
复制代码

作者: 牛牛    时间: 2013-8-1 22:12
本帖最后由 牛牛 于 2013-8-2 12:06 编辑

{:soso_e100:}

作者: gladall    时间: 2013-8-1 22:17
看题 来了
作者: 谢威    时间: 2013-8-1 22:46
哈哈,看看是什么题目
作者: yangchao313    时间: 2013-8-1 22:57
看看 自己有能力做吗
作者: 水。。。海    时间: 2013-8-1 23:06
为了节省时间就不多代码做更为细致的书写了
  1. import java.util.*;
  2. class SumDay
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println("请输入一个的年份yyyy:");//手动输入年月,在这里我就不考虑比1898年小的年了
  7.                 Scanner sc = new Scanner(System.in);
  8.                 int x = sc.nextInt();
  9.                 System.out.println("请输入一个的月份mm:");//为了节省时间在这里就不判断输入是否合法了
  10.                 Scanner sc1 = new Scanner(System.in);
  11.                 int y = sc1.nextInt();
  12.                 int coutDay=0;
  13.                 int[] arr ={31,29,31,30,31,30,31,31,30,31,30,31};//建立平年和闰年的月份数组
  14.                 int[] arr1 ={31,28,31,30,31,30,31,31,30,31,30,31};
  15.                 for (int a=1898;a<x ;a++ )                //循环累加获取距离1898年1月1日的天数
  16.                 {
  17.                         if(getYear(a))
  18.                                 coutDay+=366;
  19.                         else
  20.                                 coutDay+=365;
  21.                 }
  22.                 System.out.println(x+"年距离1898年1月1日"+coutDay+"天");
  23.                 if(getYear(x))                                        //把月份的天数加上
  24.                 {
  25.                         for (int m=0;m<y-1 ;m++ )
  26.                         {
  27.                                 coutDay+=arr[m];
  28.                         }
  29.                 }
  30.                 else
  31.                 {
  32.                         for (int m=0;m<y-1 ;m++ )
  33.                         {
  34.                                 coutDay+=arr1[m];
  35.                         }
  36.                 }
  37.                 System.out.println(x+"年"+y+"月"+"距离1898年1月1日"+coutDay+"天");
  38.         }
  39.         public static boolean getYear(int a)        //建立一个判断闰年和平年的函数
  40.         {
  41.                 if(a%100==0)
  42.                         {
  43.                                 if(a%400==0)
  44.                                         return true;
  45.                                 else
  46.                                         return false;
  47.                         }
  48.                         else if(a%4==0)
  49.                         {
  50.                                 return true;
  51.                         }
  52.                         else
  53.                                 return false;
  54.         }
  55. }
复制代码

作者: 刘张朋    时间: 2013-8-1 23:14
刘张朋 发表于 2013-8-1 19:30
为了做题,老板安排加班都不去了,加油!进黑马

嘿嘿,为理想而努力
作者: abian    时间: 2013-8-1 23:52
来凑凑热闹喽,
作者: 杨晓燕    时间: 2013-8-2 10:07
看看会不会做啊
作者: 单凯    时间: 2013-8-2 10:44
嗯,我想试试

作者: 狼牙    时间: 2013-8-2 11:17
我来看看!
作者: 狼牙    时间: 2013-8-2 11:35
  1. package test;

  2. import java.text.*;
  3. import java.util.*;

  4. public class Test
  5. {
  6.         /**
  7.          * @param args
  8.          * @throws ParseException
  9.          */
  10.         public static void main(String[] args) throws ParseException
  11.         {
  12.                 System.out.println("请输入一个日期,格式为:yyyy-mm-dd,如2000-01-01");
  13.                 Scanner c=new Scanner(System.in);//输入
  14.                 String strdate=c.next();
  15.                 String pat = "yyyy-MM-dd" ;
  16.                 SimpleDateFormat sdf = new SimpleDateFormat(pat) ;// 实例化模板对象
  17.                 Date d=sdf.parse(strdate);
  18.                 String str="1898-01-01";
  19.                 Date d2=sdf.parse(str);
  20.                 long day=(d.getTime()-d2.getTime())/(1000*24*60*60)+1;//相减
  21.                 System.out.println("相差"+day+"天");
  22.         }

  23. }
复制代码

作者: 单凯    时间: 2013-8-2 11:52
import java.io.*;
public class demo {

        /**
         *
         *  输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?
         *  程序分析:以2013年7月为例,使用循环计算1898年1月1日距离2013年1月1日的总天数(考虑闰年与平年的情况)
         *   再计算2013年1月1日距离7月的总天数
         *
         * 思路:首先算是此年中的第几天,用switch累计一下得出;
         *       再算此年的第一天离1898.1.1过了多少天,然后与前一步累加即可。
         */
        //此方法用于算这是一年中的第几天
        public static int date(int year,int month,int day){
                int sum=0;
                switch(month){
                case 12:sum+=30;
                case 11:sum+=31;
                case 10:sum+=30;
                case 9:sum+=31;
                case 8:sum+=31;
                case 7:sum+=30;
                case 6:sum+=31;
                case 5:sum+=30;
                case 4:sum+=31;
                case 3:sum+=((year%4==0)&(year%100!=0))|(year%400==0)?29:28;
                case 2:sum+=31;
                case 1:sum+=day;
                }
                return sum;
        }
        //此方法使用循环计算1898年1月1日距离2013年1月1日的总天数,然后累加计算天数
        public static int days(int year,int num){
          int sum=0,a=year-1898;
          if(a>0){
                  //这是输入的年份在1898之后
                 for (int i = 1898; i < year; i++) {
                         sum+=((i%4==0)&(i%100!=0))|(i%400==0)?366:365;
                }
                 num+=sum;
                 return num;
          }
          else if (a<0){
                  //这是输入的年份在1898之前
                  for (int i =year ; i <1898 ; i++) {
                                 sum+=((i%4==0)&(i%100!=0))|(i%400==0)?366:365;
                        }
                  num=sum-num;
                  return num;
          }
          //这是输入年份为1898年的情况
          num+=sum;
          return num;
        }
        public static void main(String[] args) {
                System.out.println("请按yyyy-mm-dd(年-月-日,月日均为2位)格式输入日期:");
                // 获取输入的日期
        BufferedReader bf =new BufferedReader(new InputStreamReader(System.in));
            String s=null;
            try{s=bf.readLine();}
            catch(Exception e){e.printStackTrace();};
            //截取年,月,日,变成int类型
            int year=0,month=0,day=0;
                   year = Integer.valueOf(s.substring(0,4));  
            month = Integer.valueOf(s.substring(5,7));
            day = Integer.valueOf(s.substring(8,10));   
            //计算天数
            int num;
            num=date(year, month, day);
            //由于num是第几天,算距离的时候应该减一,传入num-1能算出相隔的天数
            System.out.println(year+"年"+month+"月"+day+"日距离1898年1月1日一共有"+days(year,num-1)+"天");
        }

}


作者: 牛牛    时间: 2013-8-2 12:05
做完了题上交了~望老师能给点指导意见~
作者: 牛牛    时间: 2013-8-2 12:07
牛牛 发表于 2013-8-1 21:01
/**
* 题目:
*  输入某年某月,判断这一年与这一月分别距离1898年1月1日多少天?

希望老师能给点指导
作者: 小时晚er    时间: 2013-8-2 12:43
瞅瞅。。。
作者: 杨晓燕    时间: 2013-8-2 13:13
杨晓燕 发表于 2013-8-2 10:07
看看会不会做啊

:dizzy:时间到了,可是还有好多bug。。
作者: 乔小北    时间: 2013-8-2 14:23
抢一个看看
作者: 乔小北    时间: 2013-8-2 15:20
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;

  4. public class DaysTest {
  5.         public static void main(String[] args) {
  6.                 try {
  7.                         InputStreamReader isr = new InputStreamReader(System.in);
  8.                         BufferedReader br = new BufferedReader(isr);
  9.                         System.out.println("请输入年月(格式:yyyymm):");//按格式输入年月
  10.                         String s = br.readLine();
  11.                         int y = Integer.parseInt(s.substring(0, 4));//截取字符串中的年
  12.                         int m = Integer.parseInt(s.substring(4, 6));//截取字符串中的月
  13.                         int num = count(y, m);
  14.                         System.out.println("距离1898年1月有" + num + "天");
  15.                 } catch (Exception e) {
  16.                         e.printStackTrace();
  17.                 }
  18.         }

  19.         public static int count(int year, int month) {
  20.                 int num = 0;
  21.                 int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//平年的月份
  22.                 int days2[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//闰年的月份
  23.                 if (year < 1898) {    //计算在1898年之前的日期
  24.                         for (int i = year; i < 1898; i++) {
  25.                                 if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//计算年的距离时间
  26.                                         num = num + 366;
  27.                                 } else {
  28.                                         num = num + 365;
  29.                                 }
  30.                         }
  31.                         for (int j = 0; j < month - 1; j++) {//减去多余的月的距离时间
  32.                                 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
  33.                                         num = num - days2[j];
  34.                                 else
  35.                                         num = num - days[j];
  36.                         }
  37.                 } else {     //计算在1898年之后的日期
  38.                         for (int i = year; i >= 1898; i--) {
  39.                                 if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
  40.                                         num = num + 366;
  41.                                 } else {
  42.                                         num = num + 365;
  43.                                 }
  44.                         }
  45.                         for (int j = month-1; j < days.length; j++) {
  46.                                 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
  47.                                         num = num - days2[j];
  48.                                 else
  49.                                         num = num - days[j];
  50.                         }
  51.                 }
  52.                 return num;
  53.         }

  54. }
复制代码
运行结果
请输入年月(格式:yyyymm):
190501
距离1898年1月有2556天
作者: lvjayj    时间: 2013-8-2 20:07
看题目呢
作者: lvjayj    时间: 2013-8-2 20:19
  1. <pre id="recommend-content-887653677" accuse="aContent" class="recommend-text mb-10" style="margin-bottom: 10px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; color: rgb(51, 51, 51); line-height: 24px; background-color: rgb(241, 254, 221); ">import java.util.Scanner;

  2. public class test2 {
  3.         public static void main(String[] args) {
  4.                 Scanner s = new Scanner(System.in);

  5.                 System.out.print("请选择年份:");
  6.                 int year = s.nextInt();// 输入的年
  7.                 System.out.print("请选择月份:");
  8.                 int month = s.nextInt();// 输入的月

  9.                 s.close();

  10.                 int days = 0;// 统计天数
  11.                 for (int i = 1898; i < year; i++) {
  12.                         days += getDaysByYear(i);
  13.                 }

  14.                 int[] days_each_month = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  15.                 if (isLeepYear(year)) {
  16.                         days_each_month[1] = 29;
  17.                 }
  18.                 System.out.println("输入年份距离1898年1月1日的天数:" + days);

  19.                 for (int i = 0; i < month - 1; i++) {
  20.                         days += days_each_month[i];
  21.                 }
  22.                 System.out.println("输入月份距离1898年1月1日的天数:" + days);
  23.                 System.out.println("当前月份的天数:" + days_each_month[month]);
  24.         }

  25.         // 获得某年的天数
  26.         private static int getDaysByYear(int year) {
  27.                 if (isLeepYear(year)) {
  28.                         return 366;
  29.                 } else {
  30.                         return 365;
  31.                 }
  32.         }

  33.         // 判断是否是闰年
  34.         private static boolean isLeepYear(int year) {
  35.                 return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  36.         }
  37. }</pre>
复制代码

作者: 牛牛    时间: 2013-8-2 22:43
牛牛 发表于 2013-8-2 12:07
希望老师能给点指导

那版主多出点题~让我们好得技术分呀。
作者: yinbolove576    时间: 2013-8-2 23:00
都有些什么题呢?瞧瞧
作者: 浪无痕-陈文坤    时间: 2013-8-2 23:47
试试看,顶顶
作者: 王安琪    时间: 2013-8-2 23:59
晚上看题  如果3小时就是要白天了啊
作者: 王安琪    时间: 2013-8-3 00:16
  1. import java.util.Scanner;

  2. public class Waq{
  3.         public static void main(String[] args) {
  4.                 Scanner str = new Scanner(System.in);
  5.                 // 输入的年
  6.                 System.out.print("请输入年份:");
  7.                 int year = str.nextInt();
  8.                 // 输入的月
  9.                 System.out.print("请输入月份:");
  10.                 int month = str.nextInt();

  11.                 str.close();
  12.                 // 统计天数
  13.                 int days = 0;
  14.                 for (int i = 1989; i < year; i++) {
  15.                         days += getBY(i);
  16.                 }

  17.                 int[] daysEM = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  18.                 if (isLY(year)) {
  19.                         daysEM[1] = 29;
  20.                 }
  21.                 System.out.println("输入年份距离1989年1月1日的天数:" + days);

  22.                 for (int i = 0; i < month - 1; i++) {
  23.                         days += daysEM[i];
  24.                 }
  25.                 System.out.println("输入月份距离1989年1月1日的天数:" + days);
  26.         }
  27.         // 判断是否是闰年
  28.                 private static boolean isLY(int year) {
  29.                         return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  30.                 }
  31.         // 获得某年的天数
  32.         private static int getBY(int year) {
  33.                 if (isLY(year)) {
  34.                         return 366;
  35.                 } else {
  36.                         return 365;
  37.                 }
  38.         }       
  39. }
复制代码
这题以前做过 就直接把以前做的复制过来吧,以前是按照数组的方式做的,因为那时候老师布置的,按照别人的思路说数组,就用的数组去实现的!;P
作者: 浪无痕-陈文坤    时间: 2013-8-3 00:17
本帖最后由 浪无痕-陈文坤 于 2013-8-3 00:21 编辑

  1. //按全部月份计算
  2. import javax.swing.JOptionPane;
  3. class Time11
  4. {
  5. public int year;
  6. public int month;
  7. public int alldays;//所有的天数;
  8. public int weekDay;//一月当中的第一天是星期几;
  9. public int monthDays;//每月的天数
  10. public boolean isRn;//判断是否闰年
  11. public Time11()
  12. {         //添加了年份弹出框输入功能:加了提示信息防止出错
  13.         while(year<1898)
  14.         {
  15.                 String Year=JOptionPane.showInputDialog("请输入年份,必须大于1898年! ");
  16.                 year=Integer.parseInt(Year);
  17.         }
  18.         //添加了月份弹出框输入功能:加了提示信息防止出错
  19.         while(!(month>=1&&month<=12))
  20.         
  21.         {
  22.                 String Month=JOptionPane.showInputDialog("请输入月份 ,必须在1~12之间!");
  23.                 month=Integer.parseInt(Month);
  24.         }
  25.         //判断是否是闰年还是平年
  26.         //isRn=year%4==0&&year%100!=0||year%400==0;
  27. }
  28.         public int getMonths(int month)
  29.         {
  30.                 for (int i=1;i<month;i++)
  31.                 {
  32.                         switch(i)
  33.                         {
  34.                                 case 4:
  35.                                 case 6:
  36.                                 case 9:
  37.                                 case 11:
  38.                                                 alldays +=30;
  39.                                                 break;
  40.                                 case 2:
  41.                                         if(isRn)
  42.                                         {
  43.                                                 alldays +=29;
  44.                                         }
  45.                                         else
  46.                                         {
  47.                                                 alldays +=28;
  48.                                         }
  49.                                         break;
  50.                                 default:
  51.                                                 alldays +=31;
  52.                                        
  53.                                         }
  54.                         }
  55.                 return alldays;
  56.         }
  57.         public int getDays()
  58.         {        //获取从1898到(year-1)之间的总天数
  59.                 for(int i=1898;i<year;i++)
  60.                 {
  61.                         getMonths(12);
  62.                 //月份相对应的天数和year年的总天数
  63.                 }
  64.                         
  65.                 return getMonths(month);
  66.                         
  67.         }
  68. }
  69. public class TimeDemo2
  70. {
  71.         public static void main(String[] args)
  72.         {
  73.                 System.out.println(new Time().getDays());
  74. }
  75. }
复制代码

作者: 浪无痕-陈文坤    时间: 2013-8-3 00:18
本帖最后由 浪无痕-陈文坤 于 2013-8-3 00:20 编辑

  1. //按年份+月份
  2. import javax.swing.JOptionPane;
  3. class Time
  4. {
  5. public int year;
  6. public int month;
  7. public int alldays;//所有的天数;
  8. public int weekDay;//一月当中的第一天是星期几;
  9. public int monthDays;//每月的天数
  10. public boolean isRn;//判断是否闰年
  11. public Time()
  12. {         //添加了年份弹出框输入功能:加了提示信息防止出错
  13.         while(year<1898)
  14.         {
  15.                 String Year=JOptionPane.showInputDialog("请输入年份,必须大于1898年! ");
  16.                 year=Integer.parseInt(Year);
  17.         }
  18.         //添加了月份弹出框输入功能:加了提示信息防止出错
  19.         while(!(month>=1&&month<=12))
  20.         
  21.         {
  22.                 String Month=JOptionPane.showInputDialog("请输入月份 ,必须在1~12之间!");
  23.                 month=Integer.parseInt(Month);
  24.         }
  25.         //判断是否是闰年还是平年
  26.         isRn=year%4==0&&year%100!=0||year%400==0;
  27. }
  28.         
  29.         public int getDays()
  30.         {        //获取从1898到(year-1)之间的总天数
  31.                 for(int i=1898;i<year;i++)
  32.                 {
  33.                         if(isRn)
  34.                                 alldays +=366;
  35.                         else
  36.                                 alldays +=365;
  37.                 }
  38.                 //月份相对应的天数和year年的总天数
  39.                 for (int i=1;i<month;i++)
  40.                 {
  41.                         switch(i)
  42.                         {
  43.                                 case 4:
  44.                                 case 6:
  45.                                 case 9:
  46.                                 case 11:
  47.                                                 alldays +=30;
  48.                                                 break;
  49.                                 case 2:
  50.                                         if(isRn)
  51.                                         {
  52.                                                 alldays +=29;
  53.                                         }
  54.                                         else
  55.                                         {
  56.                                                 alldays +=28;
  57.                                         }
  58.                                         break;
  59.                                 default:
  60.                                                 alldays +=31;
  61.                                        
  62.                                         }
  63.                         }
  64.                 return alldays;
  65.                         
  66.         }
  67. }
  68. public class TimeDemo
  69. {
  70.         public static void main(String[] args)
  71.         {
  72.                 System.out.println(new Time().getDays());
  73. }
  74. }
复制代码

作者: 浪无痕-陈文坤    时间: 2013-8-3 00:19
这是我前面做日历改的,注释1900-->没改为1898,抱歉了
作者: 浪无痕-陈文坤    时间: 2013-8-3 00:34

//按天算//效率估计低的可怜
import javax.swing.JOptionPane;
class Time
{
public int num;
public int mon;
public int year;
public int month;
public int alldays;//所有的天数;
public int weekDay;//一月当中的第一天是星期几;
public int monthDays;//每月的天数
public boolean isRn;//判断是否闰年
public Time()
{         //添加了年份弹出框输入功能:加了提示信息防止出错
        while(year<1898)
        {
                String Year=JOptionPane.showInputDialog("请输入年份,必须大于1898年! ");
                year=Integer.parseInt(Year);
        }
        //添加了月份弹出框输入功能:加了提示信息防止出错
        while(!(month>=1&&month<=12))
       
        {
                String Month=JOptionPane.showInputDialog("请输入月份 ,必须在1~12之间!");
                month=Integer.parseInt(Month);
        }
        //判断是否是闰年还是平年
        isRn=year%4==0&&year%100!=0||year%400==0;
}
       
        public int getDays()
        {        //获取从1898到(year-1)之间的总天数
                for(int i=1898;i<year;i++)
                {       
                        if(isRn)
                        {       
                                while(num++ < 366)
                                        alldays += 1;
                        }else{
                                while(num++ < 365)
                                        alldays += 1;
                        }
                }
                for(int i=0 ; i<month ; i++)
                {       
                        num=0;
                        switch(i)
                        {
                                case 4:
                                case 6:
                                case 9:
                                case 11:
                                                mon=30;
                                                break;
                                case 2:
                                        if(isRn)
                                        {
                                                mon +=29;
                                        }
                                        else
                                        {
                                                mon +=28;
                                        }
                                        break;
                                default:
                                                mon +=31;
                                       
                                        }
                        }
                        while(num++ < mon)
                        {alldays += 1;}
       
                return alldays;
                       
        }
}
public class TimeDemo
{
        public static void main(String[] args)
        {
                System.out.println(new Time().getDays());
}
}
作者: nihaoligong    时间: 2013-8-3 08:35
支持一下 看看问题
作者: oath    时间: 2013-8-3 08:40
爱爱爱爱爱爱
作者: nihaoligong    时间: 2013-8-3 08:58
  1. package wwe;

  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. /*
  6. * 对于这个问题我首,输入一个日期 然后把这个日期通过parse()转换,
  7. * 然后再通过getTime方法转换成时间 用输入的时间减去初试时间,在除以
  8. * 一天的时间之后加上1 就是距离的天数了
  9. */
  10. public class DateDemo{
  11.         public static void main(String args[]) throws Exception{
  12.                 System.out.println("请输入一个日期,格式为(yyyy-mm-dd,如2013-08-01):") ;
  13.                 Scanner sc = new Scanner(System.in) ;
  14.                 String strDate = sc.next() ;
  15.                 String pat = "yyyy-MM-dd" ;
  16.                 SimpleDateFormat sdf = new SimpleDateFormat(pat) ;// 实例化模板对象
  17.                 Date d1 = sdf. parse(strDate);
  18.                 String str = "1898-01-01" ;
  19.                 Date d2 = sdf.parse(str) ;  
  20.                 long day = (d1.getTime() - d2.getTime()) /(1000*24*60*60) + 1 ;
  21.                 System.out.println("距离"+str+"相差" + day + "天。");
  22.         }
  23. };
复制代码

作者: 浪无痕-陈文坤    时间: 2013-8-3 09:28
版主加分呀,顺便有空多出些题,现在急缺分呀,(前面注册不成功,昨天才成功,进军8.15不知道有没有戏)谢谢!
作者: mulua    时间: 2013-8-3 12:32
好东西                       
作者: 浪无痕-陈文坤    时间: 2013-8-3 13:11
谢谢,关键现在时间不够,随便问一些简单不挂钩的问题,浪费别人时间,不想这样,哥们,加分呀,8.15不知道有没有戏,7.27才准备,有些基础,但细节不行,记得加分,昨天浪费了两分,给了又给撤了,不明白怎么回事
作者: oath    时间: 2013-8-4 22:47
  1. class GetDayNumber{
  2.        
  3.         public int year;

  4.         //方法1:得到1898~2012年的天数
  5.         int getDay(int x, int y, int m, int n){
  6.                 int sumDay = 0;       
  7.                 for ( int year = x ; year<y ; year++ ){
  8.                         if(year%4==0&&year%100==0||year%400==0)//如果是闰年               
  9.                                 sumDay+= m;       
  10.                         else//如果不是闰年       
  11.                                 sumDay+= n;
  12.                 }
  13.                 System.out.println("天数(1898年1月1日到2013年1月1日):" + sumDay);
  14.                 return sumDay;       
  15.         }

  16.         //方法2:得到2013年1月1日到7月1日的天数
  17.         int getDay2013(int x){
  18.                 int sumDay = 0;
  19.                 int year = x;
  20.                 if(!(year%4==0&&year%100==0||year%400==0)){//如果2013是不是闰年                               
  21.                         for(int mon = 1; mon<7; mon++ ){
  22.                                 if(mon%2!=  0)//大月
  23.                                         sumDay+= 31;
  24.                                 if(mon%2 == 0 && mon!=  2)//小月
  25.                                         sumDay+=  30;
  26.                                 if(mon == 2)//闰月
  27.                                         sumDay += 28;       
  28.                         }       
  29.                 }
  30.                 System.out.println("天数(2013年1月1日到7月1日):" + sumDay);
  31.                 return sumDay;               
  32.         }       
  33. }
  34. //主函数
  35. class SumDayNumber{
  36.         public static void main(String[] args){       
  37.                
  38.                 GetDayNumber sum = new GetDayNumber();
  39.                
  40.                 int day_num = sum.getDay(1898,2013,366,365);
  41.                 int day_num2013=sum.getDay2013(2013);
  42.                
  43.                 System.out.println( "总天数(1989年1月1日2013年到7月1日):" + (day_num + day_num2013) );               
  44.         }
  45. }
复制代码

作者: oath    时间: 2013-8-4 23:49
本帖最后由 oath 于 2013-8-4 23:58 编辑
oath 发表于 2013-8-4 22:47

看错了,我扫了一眼,以为是上次的
改下  ,可惜了
  1. import java.util.Scanner;

  2. class GetDayNumber{
  3.         
  4.         public int year;

  5.         //方法1:得到1898~end_year年的天数
  6.         int getDay(int end_year){
  7.                 int sumDay = 0;        
  8.                 for ( int year = 1898 ; year<end_year ; year++ ){
  9.                         if(year%4==0&&year%100==0||year%400==0)//如果是闰年               
  10.                                 sumDay+= 366;        
  11.                         else//如果不是闰年        
  12.                                 sumDay+= 365;
  13.                 }
  14.                 System.out.println("1898年1月1日到"+end_year+"年1月1日的天数:" + sumDay);
  15.                 return sumDay;        
  16.         }

  17.         //方法2:得到end_year年1月1日到到end_mon的天数
  18.         int getDay2013(int  end_year,int end_mon){
  19.                 int sumDay = 0;
  20.                 int year = end_year;                                       
  21.                 for(int mon = 1; mon<end_mon; mon++ ){
  22.                         if(mon%2!=  0)//大月
  23.                                 sumDay+= 31;
  24.                         if(mon%2 == 0 && mon!=  2)//小月
  25.                                 sumDay+=  30;
  26.                         if(mon == 2){
  27.                                 if(year%4==0&&year%100==0||year%400==0)//判断是不是闰月
  28.                                         sumDay += 29;        
  29.                                 else
  30.                                         sumDay += 28;                                       
  31.                         }                        
  32.                 }
  33.                 return sumDay;        
  34.         }        
  35. }
  36. //主函数
  37. class SumDayNumber{
  38.         public static void main(String[] args){        
  39.                
  40.                 GetDayNumber sum = new GetDayNumber();
  41.                 Scanner in=new Scanner(System.in);
  42.                 System.out.println("请输入年份,后点击确认");
  43.                 int end_year=in.nextInt();
  44.                
  45.                 System.out.println("请输入月份,在点击确认");
  46.                 int end_mon=in.nextInt();
  47.                
  48.                 in.close();
  49.                 int day_num = sum.getDay(end_year);
  50.                 int day_num2013=sum.getDay2013(end_year,end_mon);
  51.                
  52.                 System.out.println( "1989年1月1日2013年到7月1日的总天数:" + (day_num + day_num2013) );               
  53.         }
  54. }
复制代码

作者: oath    时间: 2013-8-6 21:12
oath 发表于 2013-8-4 23:49
看错了,我扫了一眼,以为是上次的
改下  ,可惜了

hao啊 好啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2