题目集1~3的总结
一:前言
通过写了三次题目集,第一次题目集是最简单的,从计算两个数的和到判断三角形类型,一共8个题目,这些都是Java入门的题目加上一点高中的知识就能搞定的。第二次题目集一共有五题,从IP地址的转换到求前N天。就合并两个有序数组为新的有序数组 而言,简单的思路就是先放到一个新的数组中,再排序。可是这种没体现不论什么算法,这里考的不是高速排序等排序算法。关键应该是怎样利用有序已知这个条件。能够这样想。如果两个源数组的长度不一样,那么如果当中短的数组用完了,即所有放入到新数组中去了,那么长数组中剩下的那一段就能够直接拿来放入到新数组中去了。这一次的题目集也不是很难。第三题目集总共有三题,从创建账户类Account 到一元多项式求导(类设计)。就创建账户类Account而言,构造方法是有参和无参,将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要添加,银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支所以CreditAccount类中需要多一个属性 ceiling 透支额度,为这两种账户编写相关的类。以上是三次题目题的总结。
二:设计与分析
从题目集1的7-8判断三角形类型分析,从代码上分析,先输入三条边,然后根据输入的三条边和三角形的判定原则来判断是否能构成三角形,如果不能构成三角形,则输入的数据是Not a triangle,如果能构成三角形,则判断是等腰直角三角形或者等腰三角形或者直角三角形还是一般三角形。
从题目集2的7-4求下一天分析。从代码上分析,先判定是平年还是闰年,再判定输入日期是否合法,根据闰年判断的判定方法来判断是否是闰年,java中提供了java.util.Date类来处理日期格式的数据,通过它可以得到其所代表的日期的年月日和时分秒等信息。java.util.Date类的底层的实现是通过一个long型的整型数据来保存日期的,这个值记录的是任何一个时间距1970年1月1日,0时0分0秒的毫秒数,因此,开发者完全不用考虑月底,年底或闰年等条件。直接为他的毫秒数加上24时所对应的毫秒数即可,然后再用新的long型的毫秒数后遭一个新的Date类型的对象,返回即可。这样就可以求出下一天。
从题目集2的7-5求前N天 分析,从代码上分析,先输入年月日,然后判定是平年还是闰年,根据日历的规则,为给定的日历字段添加或减去指定的时间量,判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象,也就是返回当前系统format的时间值。
从题目集3的7-2定义日期类Date 类分析, Date表示特定的瞬间,精确到毫秒,其子类有Date、Time、Timestap。默认情况下输出的Date对象为:Mon Oct 13 17:48:47 CST 2014,一般不是我们想要的,我们可以调用Date的一些方法来获取我们想要的日期格式最基础的日期时间类,返回一个相对日期的毫秒数。精确到毫秒,但不支持日期的国际化和分时区显示。
- Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化支持。GregorianCalendar类: 提供处理日期的方法,用于计算日期,是Calendar类的子类,有用的是有个判断闰年的方法。DateFormat类: 可以接受字符串输入 输出,提供了将日期/时间信息进行格式化处理的功能。SimpleDateFormat类: 功能更强大的日期时间格式化类,自定义格式化日期和时间。boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false。使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。使用方法 before(),after() 和 equals()。例如,一个月的12号比18 号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
从题目集3的7-3一元多项式求导(类设计)分析,从代码上分析,读题后,会获得一个偶数个值的数组,假设系数为a,指数为b;需要输出a*b+" "+(b-1);如果输入的就是零多项式(即 a 0),那么就直接输出“0 0”;如果输入的是非零项多项式,系数a(可为0或其他数字)但最后的指数b为0,那么不输出任何值。该题用了正则表达式,正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
三:采坑心得
通过这三次题集的练习,对java有了一定的了解。Java的运行原理:Java是一门编译解释型语言,我们写好的Java程序经过编译后生成后缀名为class的文件,在经过Java虚拟机JVM对class文件进行解释运行,Java程序才能运行起来。第一次作业是练习java类型的使用,以及一些简单的语法。主要目的是让我们熟练运用java的基本操作,为后面的练习打下坚实基础。通过第一次作业,主要掌握了java类型的使用,及输入输出操作,起初输入操作是不太熟悉的。第二次作业比第一次作业难度肯定加大了,最直观的感受就是代码量增多了,题型也是求解某一类问题,开始要求用方法,而不是所有东西都没有章法地写在main里面。方法的使用是java的一大特色,所以必须要求掌握。第三次作业显然难度又加大了,作业的难度系数总是在上升状态的,这样才能得到有效的提高。这次作业的要求是另写一个类并实现多种方法。确实难住我了,不过通过摸索还是实现了。类的使用是java入门,因为java程序就是用类组成的。这三次作业是有java知识迭代关系的:第一次作业:掌握java的基本语法及类型,以及输入输出操作——>第二次作业:掌握java的方法使用,以及稍复杂的计算——>第三次作业:掌握java的类的使用及多种方法的使用,用new操作来创建一个类的对象,从而用对象去调用类的功能方法。这些都是一次一次递进的,每次作业完成后都会离真正的java更近一步,也能慢慢体会面向对象程序设计的特点。首先就是正则表达式,包括正则的效率问题。实际工程中程序对各种不同状况做出的反应都应该符合用户需求。最最重要的就是面向对象的思维。
四:改进建议
在第一次题集中判断三角形类型中的判断等腰直角三角形测试点过不去,试了很多组数据,发现有的数据与预想的不一样,原来计算机有精度要求,而等腰直角三角形的两直角边都是无理数,不能轻易用勾股定理判断,要用精度去规范判断等腰直角三角形。在第二次题集中的日期类设计中指定的类的方法返回类的类型,不知道怎么返回,想了很久,试着各种方法,突然就试成功了。原来返回类就是用这个类去new一个对象,把改变的参数传出去,返回这个类的对象。
五:总结
通过这三次题集的练习,我知道了java编程是极其严谨的,不容一丝差错,宁可牺牲其灵活性也要保证其稳定性。有一次我在java编译器里将类的名字命名为Test,结果一直报错,而程序又找不出错误,想破脑袋也想不明白,后来请教别人,被某位碰到过相似问题的仁兄一语道破,原来java类里面已经隐含定义了Test类,我们又定义一次会让编译器错乱,最后我把类名改了,果然可以运行了。真是一招不慎,满盘皆输。失之毫厘,差之千里,任何标点符号都不能出错。java是由类组成的,类又由方法及属性构成,面向对象是指,java的一切操作都通过对象来操作,只有对象可以使用类的方法及属性,这就是面向对象的思想。
浙公网安备 33010602011771号