OOP作业总结
前言:前三次题目集作业对学生考查的知识点都不同,逐渐由Java基础转向类的使用,题目量由多到少,但是从题目集一到三的难度逐渐增加,我花费的时间较多,甚至一天也做不出来一道题。
题目集一:这主要考查Java的基础语法,因此难度最低。只要基础扎实,就没有任何问题。
题目集二:与题目集一相比,难度有一定的提升,主要是字符串的处理,包括字符串的提取、字符串的检验。
题目集三:这是最难的题目集,其包含的每一道题内容都比较多,而且情况也很复杂,各个情况需要花费一定的时间去理解。该题目集需要创建很多类,并且还需要String类的使用。我在此题目集中写下的代码过长,导致测试时极其容易出现错误,并且不好发现。
1.题目集二 7-2 串口字符解析
(1)设计与分析

虽然输入只有0和1,但是解析字符需要分多钟不同的情况。因此我用了很多for和if语句来判断数据。按题目的要求,输入的数据至少为11位,其包含起始位、有效数据、奇偶校验位、结束符、空闲数据等。例如:数据的起始位为“0”,如果字符串全为“1”,那么字符串不合格。还有对数据的奇偶校验,我之前一直不知道奇偶校验,直到查阅资料才发现奇偶校验是对字符串中“0”或“1”的数量的检验。本题采用奇校验:如果“1”的数量为奇数,则数据的后一位为“0”,反之则为“1”。通过检查代码,我发现我的代码比较繁琐,与其他人相比较为复杂,这是因为我考虑了多种不同的情况,有些情况的结果相同,但不好合并输出一个结果,所以我的代码需要完善。
(2)采坑心得
if(num < 11){
System.out.println("null data");
return;
}
for(i=0;i<num;i++){
if(str.charAt(i) == '1')count++;
}
if(count == num){
System.out.println("null data");
}
以上是我对数据解析的一部分代码。不难看出,这分了两种情况,一种是数据不足11位,另一种是数据全为“1”,两种情况输出的结果都为“null data”,但是我没有合并,导致我的代码更为复杂。将代码简化,这是我需要改进的地方。
(3)改进建议
如果两个if语句并列且输出结果相同,则先处理数据,再用if语句输出。这样就减少代码的行数和不必要的步骤,更简洁明了和直观。
2.题目集三 7-1 点线形系列1-计算两点之间的距离
(1)设计与分析

输入的坐标含有“,”,因此需要以字符串的形式输入,然后运用split()函数将两个数据分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点的数量是否正确,然后将字符转化为坐标,最后计算两点的距离。
(2)采坑心得
x[i]=Double.parseDouble(s2[i]);
y[i]=Double.parseDouble(s3[i]);
一开始,我不知道如何将string型转化为double型,但自己的想法很复杂,所以上网查找方法。结果得到运用Double.parseDouble()方法可以轻松将string型转化为double型。运用一些方法,可以避免写下多余的代码。
(3)改进建议
使用类与对象,就可以不需要用到数组。通过构建多个类,就能降低主类的复杂程度。例如,分别创建点和直线的类,然后在这些类里面进行计算,最后由主类输出即可。
3.题目集三 7-2 点线形系列2-线的计算
(1)设计与分析

这道题需要用到类。而我对类的用法掌握的还不够深,因此只能创建数组来解决该题。输入的选项 有多种,运用switch()方法可以将不同的选项分开来。但是不同的选项又分多种不同的情况,使得该题难度增加,所以使用了很多if和for语句来分析不同的情况。最后写的代码长并且极其复杂,有很多需要改进的地方。
(2)采坑心得
if(xab == 0 && yab == 0){
System.out.println("points coincide");
return;
}
else{
if(xde == 0 && yde == 0){
System.out.println("points coincide");
return;
}
else{
if(xab == xde && yab ==yde){
System.out.println("true");
return;
}
else{
System.out.println("false");
return;
}
}
}
这里可以将3层转化为两层if语句。在前面使用boolean判断两个点是否重合,再用if一并判断,然后再用一层if语句判断两条直线是否平行。其他地方也有类似的问题,如果都用此方法,则会减少代码的行数,看起来更加简洁。
(3)改进建议
创建直线类,可以避免频繁使用变量。在类中应添加直线的方法,例如直线的斜率、直线上两点之间的距离、有关直线的参数等等。这样就能多运用方法并且减少重复计算。
4.题目集三 7-3 点线形系列3-三角形的计算
(1)设计与分析

这道题对我来说是极其困难的,因为有很多复杂的情况。我花费了很长的时间完成这道题,使用了多层if语句来排除特殊情况。这道题的难点在于求两个直线相交的点的坐标,因此我运用了关于直线相交的公式来突破。
(2)采坑心得
System.out.println((int)(cabc * 1000000 + 0.5) / 1000000.0 + " " + (int)(squa * 1000000 + 0.5) / 1000000.0 + " " + (int)(A * 1000000 + 0.5) / 1000000.0 + "," + (int)(B * 1000000 + 0.5) / 1000000.0);
一开始,当我写下
System.out.println(cabc + " ” + squa + " " + A + B);
并代入数据输出时,我发现输出时有些数据小数点后的位数与规定的不符合,但是我反复修改仍然得不出正确的结果。通过查阅资料发现,在double型数据前面加上(int)可以将double型数据化为int型,如果按(int)(num*1En) / 1En.0的方式,可以得到小数点后n位数的数据。于是我匆忙修改了一下,但是我发现有些数据小数点后最后一位上的数字总是与正确答案差1,我想可能应该在加点东西才能得出正确的结果。不出我所料,通过查阅资料发现,在括号内的最后加上0.5可以在某一位数上四舍五入。最后我又修改了一遍,答案最终与正确结果相同。
(3)改进建议
使用直线类和正则表达式,可以减少一些不必要的步骤,简化代码。因此,要多掌握类和正则表达式的用法。
总结
Java基础虽然扎实,但是对于类的使用还需学习和掌握。我应该多在类这一方面进行深入学习,减少写代码时出现的错误,并提高写代码的效率。接下来可能会有更加困难的内容要学习,这些内容不能忽视。我将会多去查阅资料以理解更多知识点,这些知识点对我来说解决某些问题是有必要的。如果在将来的题目中运用了这些知识点,那么就可以将这些问题化繁为简。这门课程与对象和类的关系非常紧密,因此,我必须将类和对象的使用牢记在心,将来的学习中都是以类为基础的。掌握了类的使用,将来的学习就容易掌握知识点。

浙公网安备 33010602011771号