博客作业

感觉

  • 第一次作业难度一般,但因为第一次接触Java,对其语法、书写结构(尤其import 、public、class等只知道照猫画虎,尚不理解意思)不太熟悉,功能实现部分基本与C语言无异;
  • 第二次作业难度集中在后面三题,对于闰年闰月的区别会影响后续的天数判断,第一题也有些问题,没有对只能输入01做识别,导致有测试点没有过;
  • 第三次作业个人觉得比较难,因为是第一次接触类和对象的概念,有点搞不懂get和set方法的意义是什么,也不明白自己定义的class类和Main 与main的嵌套关系如何,大括号应该打在什么位置,private的意义等,在这些问题上掉了很多头发,另外正则表达式虽然功能强大,但要灵活运用也比较难。
  • 第一次作业题量虽然较多,但大多延续C语言的编程风格就可以了;
  • 第二次作业题量适中,后面三题计算天数较为费时;
  • 第三次作业题量虽少,但是难度很大,体现在对类的封装与正则表达式的灵活运用。
  • 接口概念
    官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。

  • 接口的特点
    就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。

     

    接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。
    一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。

实现一个简单的电信计费程序:
假设南昌市电信分公司针对市内座机用户采用的计费方式:
月租20元,接电话免费,市内拨打电话0.1元/分钟,省内长途0.3元/分钟,国内长途拨打0.6元/分钟。不足一分钟按一分钟计。
南昌市的区号:0791,江西省内各地市区号包括:0790~0799以及0701。

 

输入格式:

 

输入信息包括两种类型
1、逐行输入南昌市用户开户的信息,每行一个用户,
格式:u-号码 计费类型 (计费类型包括:0-座机 1-手机实时计费 2-手机A套餐)
例如:u-079186300001 0
座机号码除区号外由是7-8位数字组成。
本题只考虑计费类型0-座机计费,电信系列2、3题会逐步增加计费类型。
2、逐行输入本月某些用户的通讯信息,通讯信息格式:
座机呼叫座机:t-主叫号码 接听号码 起始时间 结束时间
t-079186330022 058686330022 2022.1.3 10:00:25 2022.1.3 10:05:11
以上四项内容之间以一个英文空格分隔,
时间必须符合"yyyy.MM.dd HH:mm:ss"格式。提示:使用SimpleDateFormat类。
以上两类信息,先输入所有开户信息,再输入所有通讯信息,最后一行以“end”结束。
注意:
本题非法输入只做格式非法的判断,不做内容是否合理的判断(时间除外,否则无法计算),比如:
1、输入的所有通讯信息均认为是同一个月的通讯信息,不做日期是否在同一个月还是多个月的判定,直接将通讯费用累加,因此月租只计算一次。
2、记录中如果同一电话号码的多条通话记录时间出现重合,这种情况也不做判断,直接 计算每条记录的费用并累加。
3、用户区号不为南昌市的区号也作为正常用户处理。

 

输出格式:

 

根据输入的详细通讯信息,计算所有已开户的用户的当月费用(精确到小数点后2位,
单位元)。假设每个用户初始余额是100元。
每条通讯信息单独计费后累加,不是将所有时间累计后统一计费。
格式:号码+英文空格符+总的话费+英文空格符+余额
每个用户一行,用户之间按号码字符从小到大排序。

 

错误处理:
输入数据中出现的不符合格式要求的行一律忽略。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、手机+座机计费系列

手机+座机计费系列代码

 

第二题与第一题相比,类图上唯一的区别是在抽象计费规则类CallChargeRule下多写了几个手机收费的子类。主要的考察还是集中在无效输入上。

三、短信计费

短信计费代码

有了之前两次的总结,本次相较前两次还更简单的练习完成得比较顺利。在类设计上模仿手机和座机计费规则类写了短信的计费类。使用正则表达式进行输入无效的判断,这次练习进行地比较顺利。

 

  这三次电信计费练习涉及了许多输入有效性的判断。也卡了较长时间。在第一题时,比较专注于时间输入有效性的判断,对SimpleDateFormat类的不了解也导致第一题使用了错误的方法判断的时间,对其余部分的格式判断也简单判断,没有使用正则表达式判断,导致座机计费格式判断并不全面。在手机+座机计费这一题时,在学会使用SimpleDateFormat类进行时间判断后,由于第一题对通话记录的判断集中于号码位数的判断,未对号码字符是否是数字进行判断导致花费了很多时间,最终使用正则表达式进行了前面的号码的判断之后还剩余两分没有获得,反复尝试后发现是时间输入格式不符合导致的,不了解什么样的输入可以被SimpleDateFormat转化却不符合yyyy.MM.dd HH:mm:ss。第三次短信收费计算的时候有了前两次的总结,写的时候就比较顺利了。

 

 

  1. 学到的知识

    • 掌握了正则表达式的运用
    • 学会多态的使用
    • 继承和接口的运用
    • 对边界问题的判断经验
  2. 需要进一步学习及研究的地方

    • 我认为应该要进一步学习构建类间关系和多态的相关知识,多学习一些java各种语法的基本原理。

    • 进一步掌握抽象、继承和多态进行编程的方法。

    •  这几次作业最明显的感觉就是类的构造吧,我想,这也是老师要求我们必须要掌握的东西。通过学会类的使用,在学会多种函数中需要用到的方法,熟练运用。但前几次作业,发现自己并没有掌握好类应该如何使用。前几次作业,就第三次作业的7-2用到了类,并且根据题目中的要求给予类中属性和构造方法。在主方法中调用自创类中的方法。

             老师平时督促也很紧,但更多的还是需要我们自主学习。平时课程为线上线下双教学模式,老师上课讲的东西更具有针对性,对我们的作业有启发。而课下更需要自己去钻研,要有不怕累,不怕苦的精神。

posted @ 2022-06-17 10:34  jjsholy  阅读(58)  评论(0)    收藏  举报