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

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

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。这是因为,调用非静态函数的时候,得先实例化对象,为其分配了空间才能进行下去。而静态方法就不同了,其在程序载入时就已经分配了空间,这样就可以直接调用了。看来还是得多练习一下,避免这样的小错误。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值