• JAVA中用偏移 求闰年的疑惑


    对于java中求一个闰年, 或许大家都很熟悉:  就是 判断这个年份能被4整除,并且不能被100整除,  或者是能被400整除 在这里直接上代码

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个年份");
        int i = sc.nextInt();
        //for(int i = 0 ;i<10000;i++){ 

        if((i%4==0&&i%100!=0)||i%400==0){
        System.out.println(i+"是闰年");
        }else{
        System.out.println(i+"是平年");
        }
        //}

        这样可以很简单的求出一个闰年,  但是还有第二种方式: 只需要判断这个月的2月份有多少天, 如果是29天就是闰年, 如果是28天就是平年.  还是直接上代码

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个年份");
        int year = sc.nextInt();
       
        Calendar c = Calendar.getInstance();
        . 设置输入年3月1日, set(int year, int month, int day);
        c.set(year, 2, 1);// 设置成3月1日 , 这里获取月份表示范围是[0,11]表示[1,12]月份
         将这个日历对象的中的天数,向前偏移一天,add(int field, int amount);
        c.add(Calendar.DAY_OF_MONTH, -1);  前面设置成了3月1日, 3月1日向前偏移一天就是2月的最后一天
         获取这个月的天数.get(int Field);
        int day = c.get(Calendar.DAY_OF_MONTH);
        if(day == 29){
        System.out.println(year + "年是闰年");
        }else{
        System.out.println(year + "年是平年");
        }

        到了这里就出现了问题  当年份为

                  //100,200,300,500,600,700,900
        //1000,1100,1300,1400,1500,1700,1800,1900
        //2100,2200,2300,2500,2600,2700,2900
        //3000,3100,3300,3400,3500,3700,3800,3900
        //4100,4200,4300,4500,4600,4700,4900  ..................

        这些时 , 本应该是平年 ,  用偏移输出的却是闰年   也就可以理解成:上面年份的二月 在java时间中是29天. 很明显 ,这是错误的

        知错能改善莫大焉!  

  • 相关阅读:
    环境变量
    多重继承
    参数检查(@property)
    限制属性绑定(__slots__)
    实例属性和类属性
    2017-11-28 中文编程语言之Z语言初尝试: ZLOGO 4
    2017-10-23 在各种编程语言中使用中文命名
    2017-11-27 汉化了十数个编译器的前辈的心得体会
    五行
    阴阳
  • 原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8136257.html
Copyright © 2020-2023  润新知