前一日函数PreDate(static方法与非static的区别)

来源:互联网 发布:怎么分辨mac口红真假 编辑:程序博客网 时间:2024/06/12 19:12

最近写了一段求给定日期的前一天的日期的一个程序,虽然简单,但也有点收获
程序如下:

import java.util.Scanner;public class PreDate {    public static boolean isCorrect(int year,int month,int day){        boolean flag=false;        if(year>=1812 && year<=2017)            if(month>=1 && month<=12){                if(month==2){                    if(year%4==0 && year%100!=0 || year%400==0){                        if(day<=29 && day>=1)                            flag=true;                    }                    else if(day<=28 && day>=1)                        flag=true;                }else if(month==4 || month==6 || month==9 || month==11){                    if(day>=1 && day<=30)                        flag=true;                }else{                    if(day>=1 && day<=31)                        flag=true;                }            }        return flag;    }    public static void main(String[] args) {        // TODO Auto-generated method stub        int year,month,day;        Scanner sc = new Scanner(System.in);        System.out.print("请输入年份:");        year = sc.nextInt();        System.out.print("请输入月份:");        month = sc.nextInt();        System.out.print("请输入天数:");        day = sc.nextInt();        sc.close();        System.out.println("输入的日期是"+year+"年"+month+"月"+day+"日");        if(isCorrect(year,month,day)){            if(month==1){                if(day==1){                    year--;                    month=12;                    day=31;                }            }else if(month==3){                if(day==1){                    month--;                    if(year%4==0 && year%100!=0 || year%400==0)                        day=29;                    else                        day=28;                }else                    day--;            }else if(month==5 || month==7 || month==10 || month==12){                if(day==1){                    month--;                    day=30;                }else                    day--;            }else{                if(day==1){                    month--;                    day=31;                }else                    day--;            }            System.out.println("前一天日期为"+year+"年"+month+"月"+day+"日");        }else{            System.out.println("日期输入错误,请检查年月日是否正确");        }    }}

程序前面的静态函数是用来判断输入的日期是否正确。与NextDate不一样的是,对于天数的判断只需要判断其是否为1,这样才会判断其月份是否需要减1,对于NextDate而言则是需要判断其是否为28,29,30,31.这样才能接着判断月份是否加1.

在写程序的时候出了一些小失误,开始的isCorrect()函数我没有将其声明为static类型,然后便直在main()里没有创建对象便直接调用了。然后程序就有了bug。这是因为,调用非静态函数的时候,得先实例化对象,为其分配了空间才能进行下去。而静态方法就不同了,其在程序载入时就已经分配了空间,这样就可以直接调用了。看来还是得多练习一下,避免这样的小错误。

0 0
原创粉丝点击