题目级1-3作业总结

发布时间 2023-03-26 23:05:59作者: 21161121徐坤

一、前言

这学期第一次接触Java面向对象,开始还不太懂Java的基础语法,在后面的学习中也开始逐渐了解了Java的基础语法,所以一开始对于怎么写,以及java语法有点不太适应。

二、设计与分析

第一次OOP训练题集总结

第一题:

基本年利率7.7%,如果一年以内利率给5折,如果三年以内利率为7折,如果五年以内利率为100%,如果五年以上利率为1.1倍。输入一个年份,计算这个年份下的实际利率是多少?

 

 

 本题总结:本题用到了条件if语句,不足之处在于一开始并未注意用浮点数,导致输出错误

第二题:

打印九九乘法表,输入一个1-9的整数,假设该整数是n,则打印乘法表的前n行。

用户输入的整数不在1到9这个范围内,则固定输出下面信息:

INPUT ERROR.

两个整数之间的乘号,是使用的大写字母X。同一行的多个乘法结果之间,用制表符\t分开,一行末尾没有多余的制表符。

 

 本题总结:本题用到嵌套循环输出九九乘法表,刚开始没有加换行判断,导致没有换行输出。

第三题:

按递增顺序依次列出所有分母为N(10 <= N <= 40),分子小于N的最简分数。

 

 本题总结:本题首先了解了真分数的定义,然后首先开始用for循环判断真分数,然后再用另一个新的for循环输出所有分子小于N的真分数

第四题:

编写一个程序,统计一个子串在整串中出现的次数,例如子串“nba”在整串“nbaabcdefnbaxyzmba”中出现的次数为2。要求使用String或者StringBuffer类的常用方法来计算出现的次数。

请注意:含有main方法的类(class)的名字必须命名为Main,否则调试不成功。

 

 

 本题总结:首先输入一个字符串和想要统计的字符串,然后先进行判断想要统计的字符串是否在输入的字符串中,若没找到下标值返回-1,找到则变为所在下标值,用count来统计次数。

 

第二次OOP训练题集总结

第一题

长度、质量的计量有多重不同的计算体系,有标准的国际单位制:千克与米,也有各个国家自己的计量方法如:磅、英寸;1磅等于0.45359237千克,1英寸等于0.0254米,请编写程序实现国际单位制与英制之间的换算。

 

 

 本题总结:本题的重点在于注意小数点保留。

第二题

学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号

 

 

 本题总结:先用字符串输入学号,然后将字符强制转换为整数型,然后再用substring提取其中的数字,最后依次输出学院、班级、学号。

第三题

巴比伦法求平方根近似值

 巴比伦法求n的近似值可以用以下公式:
nextGuess = (lastGuess+n/lastGuess)/2
程序初始运行时lastGuess可赋予一个最初的猜测值。当由公式求得的nextGuess和lastGuess相差较大时,把nextGuess的值赋给lastGuess,继续以上过程,直至nextGuess和lastGuess几乎相同,此时lastGuess或者nextGuess就是平方根的近似值。
本题要求:nextGuess和lastGuess的差值小于0.00001时认为两者几乎相同

 

 

 本题总结:用while循环来进行平方根近似值求算。本题的关键是注意浮点数输出,开始浮点数输出格式写错,导致无法保留到相应的小数点数。

第四题

在一个字符串中提取出其中的二进制数值序列

 

 

 本题总结:先定义一个字符串,和一个存入二进制的数组,然后对字符串查找是否有-1,若有-1就视为非法输入,没有-1然后就进行for循环查找‘0’、‘1’,最后在输出。

第五题

输入三角形三条边,判断该三角形为什么类型的三角形。

 

 

 本题总结:本题重点是用数学公式表达相应类型的三角形,我在判断等腰直角三角形时,开始用的两边相等然后满足两边平方的和等于第三条斜边,但未考虑到浮点数,所以又改换成两边相等并且两边的平方和减斜边的平方小于0.1。

第六题

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。
注意:不允许使用Java中和日期相关的类和方法。

 

 

 

 

 

 本题总结:首先进行对闰年的判断,然后判断是否输入合法,然后开始判断边界值,如:每个月最后一天、12月31日,然后进行边界值相应的处理,最后输出下一天的日期。

第三次OOP训练题集

第一题

编写一个圆形类Circle,一个私有实型属性半径,要求写出带参数构造方法、无参构造方法、属性的getter、setter方法以及求面积、输出数据等方法,具体格式见输入、输出样例。

 

 

 本题总结:本题用了一个类,用了带参构造方法、无参构造方法、getter、setter方法获取半径值和面积值,最后再计算面积并输出半径以及面积。

第二题:

建账户类Account

 

 

 

 

 

 

 

 

 

本题总结:先将id、balance、annuallmteresRate、dateCreate定义为私有属性,然后再用无参构造方法创建默认账户,再用getter及setter方法获取和赋值id、balance、annnuallnteresRate,再写一个getMonthlyInterestRate的方法来算月利息,再写Withdraw 和deposit的方法判断是否为非法输入。最后输出。

第三题

定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。

 

 

 

 

 

 

 

 

 

 

 本题分析:定义私有属性year、month、day,再用getter、setter获取和赋值year、month、day,再通过isLeapyear方法判断是否为闰年,再通过checkInputValidity来判断是否为非法输入,再通过getNextDate的方法来获取下一天,最后输出。

第四题

参考题目3和日期相关的程序,设计一个类DateUtil,该类有三个私有属性year、month、day(均为整型数),其中,year∈[1820,2020] ,month∈[1,12] ,day∈[1,31]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 本题总结:定义私有属性year、month、day,再通过getter、setter获取和赋值year、month、day,再用checkInputValidity()、isLeapyear的方法判断是否为非法输入和是否为润年,用getNextNDays获取下n天的日期,其中我用for循环依次对日期进行累加直到加完n次,用PreviousNDays获取前n天,其中也用了和获取下n天一样的方法,但要注意边界值,用equalTwoDates的方法来判断两个日期是否相等,用comparaDates的方法通过比比较,来判断两个日期的前后,用getDaysofDates的方法来算出两个日期的天数差,最后输出。

三、踩坑心得


第一次作业

(1)还未涉及过难的语法及方法和类,主要是利用for循环来实现目的和用一些方法来处理字符串,但刚开始并未了解Java中对字符串的一些处理方法,所以导致了一些语法错误。

(2)在对于一些需要保留小数点后几位数的题目,在写代码时容易错用c语言的语法导致语法错误,但这些坑经过翻书查找资料都一一解决。

第二次作业:

(1)在用substring提取字符串中的字符时,弄混了字符所在下标,导致提取的字符与下标不对应,后面通过翻书第二个输入的下标值应为最后一个目标字符的前一个下标。

(2)在判断等腰直角三角形的时候,没有注意到有浮点数代入计算,后改为两边的平方和减去斜边的平方要小于0.1。

 

 (3)计算下一天的时候,开始边界值判断弄错了,导致没有输出正确的答案。

第三次作业

(1)算下两日期差多少天时,开始用的while循环,小的日期一次一次加到与大的日期相等为止,但运行超时了,后来用了先算年之间的天数差,再算月的天数差,最后算日的天数差。

 

 四、改进建议

在开始写作业一和二时碰到一些关于Java字符串的题,老是写错基本语法,对Java的语法熟练度欠佳,或者会用的不正确,在后期中可以多去学习Java的语法。

在写后面关于下n天的题目时,一开始用的很笨的办法,用while循环去一天一天的加,导致了运行很慢甚至还超时了

 

 后面换了思路,分年月日去计算天数,效率高了不少。

 

 五、总结

这三次OOP训练题集是第一次写的Java作业,所以可能写的效率以及熟练度不是特别好,在语法方面容易犯初级错误,对string的方法运用不熟悉,但在查阅资料和翻阅书籍后,也差不多都能将问题解决。对于最后几个比较难一点的题目,开始也是想了很久,最后也是通过一些查找资料才写出来,在以后的Java学习中,一定要多翻阅资料和书籍。对类与对象的认识欠缺,希望能在以后的作业中更加熟练类与对象,多去通过慕课去了解。

对课程的建议:虽然作业会很多,但希望每次能从这些任务中真正的学到更多的知识。