三次java作业总结
三次作业的知识点主要包括静态方法,构造方法,实例方法的创建、调用,this关键字,方法重载以及一些基础知识,大多数题目需要进行分情况讨论,需要对题目的考察点了如指掌,否则容易出现分类不全的情况。其中第一次作业难度稍小,后两次作业都有难点。
第一次作业
第一次作业难度偏低但题目较多,其中需要思考的有二进制数值提取和判断三角形类型。二进制数值提取需要从一串含有非0、1字符的字符串中提取出二进制数,也就是说要将该字符串拆分成一个个字符,然后对单个字符进行判断。可以使用CharAt()方法获取符合要求的字符在用“+”进行拼接。三角形判断只需要注意对所有情况进行分析就没有什么难度。
虽然第一次作业有点简单,但还是学到了不少没接触过的知识,也对之前所学的知识进行了巩固,并且在之后的作业中也需要运用该次作业的知识方法。
第二次作业
第二次作业的题目都和字符串有关,虽然只有三道题,但难度骤然提升,对思维以及对知识的运用都是极大的考验。其中第二道题目不仅考察编程能力,还需要认真审题,还要理解高、低电平,我一开始看到题目就将题目的意思搞错,误将有效位前加上一位起始位‘0’认为是有效位第一个数是‘0’。此外,题目还含有隐含条件需要考虑,如输入的位数不足11位,满足n个数据但接下开的字符个数不足以满足第n+1个数据。这道题找到起始位是关键,以及奇偶校验位和结束位需要为‘1’。
使用str.length()<11可以判断数据是否有11位,str.charAt(i) == '0'&&i+10
第三次作业
第三次作业关联性很强,层层递进,前一题的方法可以使用在后一题,难度也随之提高。
第一题计算两点之间的距离。这题最大的难点就是判断数据是否合法,输入时坐标之间用‘,’分隔以及两点用空格分隔。C语言的scanf可以很简单的实现输入数据之间用空格或者逗号分隔,但java却不能这样。不管你想输入int还是double类型的数据,这时必须先用String类型,在调用split()对字符串进行拆分存入数组才能在输入时使用空格、逗号,之后再用parse将数据转化为对应数据类型。数据不合法只要判断split()拆分的每个数据是否能转化为想得到对应数据类型,不能则不合法。经过查询资料得知可以使用try{ }catch(){ }处理异常。判断点的个数只需判断所需点坐标个数是否等于数组长度。
第二题线的计算分为几个选项。计算斜率要注意斜率不存在的情况,判断平行要注意直线是否重合。该题代码量大,逻辑必须清晰,不然很容易出错。每一个选项逐层深入,看起来简单,但开始动手写就会发现它难度不小,特别是当写的时间长了以后就会忘记之前写的代码,导致逻辑混乱,并且代码越多,出现问题后找起来也更麻烦。我是通过创建几个方法分别实现选择、输入、判断、计算斜率、计算距离、判断是否共线、是否平行以及寻找交点并判断是否在两条线段内的功能。
第三题三角形的计算,和第二题有大量共通之处,大部分代码可复制粘贴。需要注意的是输出的数据小数点后超过六位需要四舍五入,三个点是否能构成三角形以及构成直线的两点不能重合。我认为三次题目最难的是用射线法判断点是否在三角形内,如果以该点做水平射线与三角形只有一个交点则在三角形内,还要考虑点在三角形的边上。
题目集三
7-1
7-2
7-3
心得:PTA提交代码时主类名要改为Main,第一次作业部分题目浮点数必须使用float而不能用double
总结:
学会了正则表达式,CharAt(),split(),try{ }catch(){ },知道了提前规划代码实现何种功能的重要性,知道了自己在逻辑思维上还有待提高,以及查询到有帮助资料的能力太弱。我认为老师应该在作业提交结束之后给出正确代码或者将作业完成较好的同学的代码公布出来,单纯靠上课讲解无法完成理解,因为没有阅读过老师讲解的代码,不知道每个名称代表着什么,以至于跟不上节奏。我认为课后可以创建一个群聊分享各自的代码,看看别人是如何实现功能的,还可以分享有用的视频、文章、题目。