当前位置: 首页 > news >正文

Algs4-1.2.19字符串解析

1.2.19字符串解析。为你在练习1.2.13中实现的Date和Transaction类型编写能够解析字符串数据的构造函数。它接受一个String参数指定的初始值,格式如表1.2.20所示:
Partial solution:
public Date(String date)
{
String[] fields = date.split("/");
month = Integer.parseInt(fields[0]);
day = Integer.parseInt(fields[1]);
year = Integer.parseInt(fields[2]);
}
答:
图片

public class SmartDate
{
   private final int myYear;
   private final int myMonth;
   private final int myDay;
  
   public SmartDate(String date)
   {
       String[] words=date.split("/");
       int month=Integer.parseInt(words[0]);
       int day=Integer.parseInt(words[1]);
       int year=Integer.parseInt(words[2]);
       //
      mySmartDate(month,day,year);
      //
       myYear=year;
       myMonth=month;
       myDay=day;
   }
  
    public SmartDate(int month,int day,int year)
    {
        mySmartDate(month,day,year);
        //
        myYear=year;
        myMonth=month;
        myDay=day;
        //
      }
   
    private void mySmartDate(int month,int day,int year)
    {
        if(year<0)       throw new IllegalArgumentException("year is error.");
        if(month<1 || month>12)    throw new IllegalArgumentException("month is error.");
        if(day<1 || day>31)    throw new IllegalArgumentException("day is error.");
        if(month%2==0 && day>30)  throw new IllegalArgumentException("day is error.");
        if(year%400!=0 && (!(year%4==0 && year%100!=0)) && month==2 && day>28) throw new IllegalArgumentException("day is error.");
        if((year%400==0 || (year%4==0 && year%100!=0)) && month==2 && day>29) throw new IllegalArgumentException("day is error.");
    }
   
    public int month()
    {
        return myMonth;
    }
   
    public int day()
    {
        return myDay;
    }
   
    public int year()
    {
        return myYear;
    }
   
    public String dayOfTheWeek()
    {
        int w=(myYear%100+(myYear%100)/4+(myYear-myYear%100)/4-2*(myYear-myYear%100)+26*(myMonth+1)/10+myDay-1)%7;
        if(w<0) w=w+7;
        String weekstr="";
        switch(w)
        {
            case 0: weekstr="Sunday"; break;
            case 1: weekstr="Monday"; break;
            case 2: weekstr="Tuesday"; break;
            case 3: weekstr="Wednesday"; break;
            case 4: weekstr="Thursday"; break;
            case 5: weekstr="Friday"; break;
            case 6: weekstr="Saturday"; break;
        }
      return weekstr;
    }
   
    public String toString()
    {
        return month()+"/"+day()+"/"+year();
    }
   
    public static void main(String[] args)
    {
        SmartDate d=new SmartDate(9,18,2016);
        StdOut.printf("Date is:%s,WeekDay is:%s\n",d.toString(),d.dayOfTheWeek());
        //
        SmartDate d2=new SmartDate("9/25/2016");
        StdOut.printf("Date is:%s,WeekDay is:%s\n",d2.toString(),d2.dayOfTheWeek());
    }
}

转载于:https://www.cnblogs.com/longjin2018/p/9848953.html

相关文章:

  • 深度学习工程模板
  • Spring Framework 4.2 中的新功能和增强功能
  • vue build后。静态资源的404问题探究,解决
  • nginx启动失败问题集锦
  • 第2章 变量和基本类型 附2 --声明和定义的区别
  • MySQL,binlog2sql回滚操作测试
  • 2015年9月30日的作业
  • 201771010126 王燕《面向对象程序设计(Java)》第九周学习总结
  • icomoon用法
  • [BZOJ] 2044: 三维导弹拦截
  • this class is not key value coding-compliant for the key XXX错误的解决方法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • LeetCode——Implement Trie (Prefix Tree)
  • 从普通程序员到身价过百亿:追求长期价值的耐心,决定了你能走多远
  • Android图形显示系统——概述
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Bootstrap JS插件Alert源码分析
  • CEF与代理
  • CentOS 7 修改主机名
  • Hexo+码云+git快速搭建免费的静态Blog
  • interface和setter,getter
  • Markdown 语法简单说明
  • mysql常用命令汇总
  • python学习笔记-类对象的信息
  • vue-router的history模式发布配置
  • - 概述 - 《设计模式(极简c++版)》
  • 经典排序算法及其 Java 实现
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 学习ES6 变量的解构赋值
  • 移动端解决方案学习记录
  • ​Linux·i2c驱动架构​
  • ​比特币大跌的 2 个原因
  • #《AI中文版》V3 第 1 章 概述
  • (1)(1.9) MSP (version 4.2)
  • (c语言)strcpy函数用法
  • (二)fiber的基本认识
  • (二)PySpark3:SparkSQL编程
  • (二)丶RabbitMQ的六大核心
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)Honghu Cloud云架构一定时调度平台
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转) Face-Resources
  • (转)Google的Objective-C编码规范
  • (转)setTimeout 和 setInterval 的区别
  • (转载)深入super,看Python如何解决钻石继承难题
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 使用反射注册事件
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET文档生成工具ADB使用图文教程
  • .skip() 和 .only() 的使用
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C++] 多线程编程-thread::yield()-sleep_for()