1.前言
这三次题目集题量在逐渐减少,但是难度增加了很多。第一次题目集较为基础,让我学会了用java语言编写程序,知道了如何用eclipse调试代码以及debug。第二次题目集难度并没有增加很多,更多是关于逻辑和类间的调用。第三次题目集难度上升了很多,使用了构造函数封装类隐藏属性体现了面向对象设计的思想。有些题目还需要使用正则表达式进行校验,学会了正则表达式中一些基本方法的使用。
2.设计与分析
题目集1 7-8
用户输入三个数,系统自动判定三个数能否作为三角形的三天边构成三角形,然后对于不同的情况进行不同的输出。
classMain
+a:int
+b:int
+c:int
+judge()
题目较为简单,只是进行判断然后输出,但是我有一个测试点过不去并且一直没有找到原因。这次题目让我对java语言有了初步的认识。
题目集2 7-4
用户输入年月日,系统自动判定下一天的年月日并输出,需要注意的是由于闰年平年以及每个月的天数不尽相同,所以要注意日期的合法性。
classMain
+year:int
+month:int
+day:int
+isLeaper(int year):boolean//判断year是否为闰年
+checkInputValidity(int year,int month,int day):boolean//判断输入日期是否合法
+nextDate(int year,int month,int day) //求输入日期的下一天
这次题目让我对不同方法间的联系有了一定的了解,学会了java中数组的运用。
题目集2 7-5
用户输入年月日并且输入一个n表示天数,系统自动判定输出前或后(取决于n的正负)n天的日期。
classMain
+year:int
+month:int
+day:int
+n:int
+isLeapYear(int year) :boolean//判断year是否为闰年
+checkInputValidity(int year,int month,int day):boolean//判断输入日期是否合法
+nextDate(int year,int month,int day,int n)//求输入日期的前n天
这次题目和上个题目差别不大,不过需要更多判断来保证日期的合法。
题目集3 7-2
题目要求还是求得下一天的日期,但是需要对类进行封装,方法不再能直接调用日期,这样做体现了面向对象的思想。
这次题目要使用构造函数,并且对属性进行了隐藏,调用需要用到get/set方法。
题目集3 7-3
这个题目太难,我没做出来。
3.踩坑心得
题目集1
题目较为简单并未遇到问题。
题目集2
7-1
题目要求字符长度为32为并且只能由0和1组成,由于在输入时不能直接控制长度,所以输入时加入flag标志,若由0和1以外的字符输入则直接跳出并且输入错误提示,而在输入结束以后再判断字符串长度是否为32位。我一开始将字符串长度直接定义为32位,导致用户只能输入32位,所以在一个测试点中过不去,修改以后测试点全部通过。
7-3
所有关于日期的判断都和闰年及平年以及每月的天数有关,一开始没有在意发现测试点都过不去,后来定义了两个数组,数组中的内容则代表平年和闰年每月的天数,这样在进行判断后可以直接使用相应数组进行判断。
int[] mon1=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
53
int[] mon2=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
题目集3
7-1
题目要求需要控制输出的格式,我一开始自然的用C中控制输出格式的方法发现不行,百度一下才发现java中对于格式的控制。
System.out.println("The Account'balance:"+String.format("%.2f", account.getBalance())+"\n"+"The Monthly interest:"+String.format("%.2f", account.getMonthlyInterest())+"\n"+"The Account'dateCreated:"+date);
7-2
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。要求必须实现类的封装性,这样的话我们只能定义set和get方法来对私有属性成员进行调用。
Date M = new Date();
M.setYear(in.nextInt());
M.setMonth(in.nextInt());
M.setDay(in.nextInt());
M.isLeapYear(M.getYear()) M.checklnputValidity(); M.getNextDate();
4.改进建议
暂无建议
5.总结
这三次题目使我学会了java需要最基本的代码书写。我了解了面向对象的设计思想,在设计代码的时候也会用到这种思想。但是这门课程的学习还处于初级阶段,还有很多需要我去学习,对于像正则表达式这种较为难的知识点我并没有很好的掌握,在今后的学习中对于较为困难的知识我应该投入更多时间去掌握。