• CS61b homework2 打卡


    主要考点:String类matches和split方法的运用,正则表达式的运用。

    判断闰年,计算天数等算法。代码如下:

    import java.io.*;
    
    public class Date {
        private int month;
        private int day;
        private int year;
    
      public Date(int month, int day, int year) {
          if(!isValidDate(month,day,year))
              System.exit(0);
          this.month=month;
          this.day=day;
          this.year=year;
      }
    
      public Date(String s) {
          if(s.matches("\d{1,2}\/\d{1,2}\/\d{1,4}")){
              String[]o=s.split("/");
              if(isValidDate(Integer.parseInt(o[0]),Integer.parseInt(o[1]),Integer.parseInt(o[2])))
              {
                  month=Integer.parseInt(o[0]);
                  day=Integer.parseInt(o[1]);
                  year=Integer.parseInt(o[2]);
              }else
                  System.exit(0);
              
          }else
              System.exit(0);
    
      }
    
      public static boolean isLeapYear(int year) {
        if(year%4==0&&year%100!=0||year%400==0)
            return true;
        else return false;
      }
    
      public static int daysInMonth(int month, int year) {
          if(month<1||month>12)
              System.exit(0);
        switch(month){
        case 1:return 31;
        case 2:if(isLeapYear(year))return 29;
        else return 28;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        default:return 31;
             }
      }
    
      public static boolean isValidDate(int month, int day, int year) {
        if(day>daysInMonth(month,year))return false;
        else return true;
      }
    
      public String toString() {
        return(this.month+"/"+this.day+"/"+this.year);         
      }
    
      public boolean isBefore(Date d) {
        if(this.year<d.year)return true;
        else if(this.year==d.year&&this.month<d.month)return true;
        else if(this.year==d.year&&this.month==d.month&&this.day<d.day)return true;
        else return false;
      }
    
      public boolean isAfter(Date d) {
        if(isBefore(d))return false;
        else if(this.year==d.year&&this.month==d.month&&this.day==d.day)
            return false;
        else return true;
      }
    
      public int dayInYear() {
          int total=0;
        for(int i=1;i<month;i++)
            total+=daysInMonth(i,this.year);
        total+=this.day;
        return total;
      }
    
      public int difference(Date d) {
        if(isAfter(d)){
            int total = 0;
            for(int i=d.year;i<this.year;i++){
                if(isLeapYear(i))total+=366;
                else total+=365;
            }
            int dayDifference=this.dayInYear()-d.dayInYear();
            total+=dayDifference;
            return total;
        }else if(isBefore(d)){
            return -d.difference(this);
        }
        else return 0;
      }
    
      public static void main(String[] argv) {
        System.out.println("
    Testing constructors.");
        Date d1 = new Date(1, 1, 1);
        System.out.println("Date should be 1/1/1: " + d1);
        d1 = new Date("2/4/2");
        System.out.println("Date should be 2/4/2: " + d1);
        d1 = new Date("2/29/2000");
        System.out.println("Date should be 2/29/2000: " + d1);
        d1 = new Date("2/29/1904");
        System.out.println("Date should be 2/29/1904: " + d1);
    
        d1 = new Date(12, 31, 1975);
        System.out.println("Date should be 12/31/1975: " + d1);
        Date d2 = new Date("1/1/1976");
        System.out.println("Date should be 1/1/1976: " + d2);
        Date d3 = new Date("1/2/1976");
        System.out.println("Date should be 1/2/1976: " + d3);
    
        Date d4 = new Date("2/27/1977");
        Date d5 = new Date("8/31/2110");
    
        System.out.println("
    Testing before and after.");
        System.out.println(d2 + " after " + d1 + " should be true: " + 
                           d2.isAfter(d1));
        System.out.println(d3 + " after " + d2 + " should be true: " + 
                           d3.isAfter(d2));
        System.out.println(d1 + " after " + d1 + " should be false: " + 
                           d1.isAfter(d1));
        System.out.println(d1 + " after " + d2 + " should be false: " + 
                           d1.isAfter(d2));
        System.out.println(d2 + " after " + d3 + " should be false: " + 
                           d2.isAfter(d3));
    
        System.out.println(d1 + " before " + d2 + " should be true: " + 
                           d1.isBefore(d2));
        System.out.println(d2 + " before " + d3 + " should be true: " + 
                           d2.isBefore(d3));
        System.out.println(d1 + " before " + d1 + " should be false: " + 
                           d1.isBefore(d1));
        System.out.println(d2 + " before " + d1 + " should be false: " + 
                           d2.isBefore(d1));
        System.out.println(d3 + " before " + d2 + " should be false: " + 
                           d3.isBefore(d2));
    
        System.out.println("
    Testing difference.");
        System.out.println(d1 + " - " + d1  + " should be 0: " + 
                           d1.difference(d1));
        System.out.println(d2 + " - " + d1  + " should be 1: " + 
                           d2.difference(d1));
        System.out.println(d3 + " - " + d1  + " should be 2: " + 
                           d3.difference(d1));
        System.out.println(d3 + " - " + d4  + " should be -422: " + 
                           d3.difference(d4));
        System.out.println(d5 + " - " + d4  + " should be 48762: " + 
                           d5.difference(d4));
      }
    }

    运行结果:

  • 相关阅读:
    Unity 绘制带颜色的流线 streamline
    Tinyply 源码阅读
    题解 [BZOJ2952]长跑
    莫比乌斯反演技巧
    题解 pyh的求和
    Java Web基础
    后端常用数据持久层模板及框架以及一些工具类模板的配置使用集合
    12306火车订票系统(C++)
    C++/Java文件读写并执行相关操作、文件复制、文件格式转换等(举例)
    《Java EE编程技术》综合应用系统开发_作业管理系统_Struts2_设计报告
  • 原文地址:https://www.cnblogs.com/lyz1995/p/7147493.html
Copyright © 2020-2023  润新知